最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java包裝類及自動(dòng)裝箱拆箱

 更新時(shí)間:2019年03月25日 09:15:49   作者:Kevin_Lyz  
這篇文章主要介紹了Java包裝類及自動(dòng)裝箱拆箱,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Java包裝類

基本類型 大小 包裝器類型
boolean / Boolean
char 16bit Boolean
byte 8bit Byte
short /16bit Short
int 32bit Integer
long 64bit Long
float 32bit Float
double 64bit Double
void / Void

Java 的包裝類有兩個(gè)主要的目的:

  1. Java包裝類將基本數(shù)據(jù)類型的值“包裝”到對象中,對基本數(shù)據(jù)類型的操作變?yōu)榱藢ο筮M(jìn)行操作,從而使基本值能夠包含在為對象為保留的操作中。比如向Collections中添加元素(泛型的操作限制加入的只能是對象,比如List = new ArrayList() 的寫法是錯(cuò)誤的),或者從帶對象返回值的方法中返回。
  2. 更加方便類型的轉(zhuǎn)換,如常見的Integer向字符的轉(zhuǎn)換

裝箱和拆箱

Java 在SE5之后提供了自動(dòng)的裝箱和拆箱機(jī)制?;緮?shù)據(jù)類型可以和與其對應(yīng)的包裝類之間自動(dòng)進(jìn)行轉(zhuǎn)換

如:

Integer i = 10;
int index = i;

裝箱就是自動(dòng)將基本數(shù)據(jù)類型轉(zhuǎn)換為包裝器類型
拆箱就是自動(dòng)將包裝器類型裝換為基本數(shù)據(jù)類型

在裝箱的時(shí)候自動(dòng)調(diào)用的是Integer的valueOf(int)方法。而在拆箱的時(shí)候自動(dòng)調(diào)用的是Integer的intValue方法。

其他的也類似,比如Double、Character,不相信的朋友可以自己手動(dòng)嘗試一下。

因此可以用一句話總結(jié)裝箱和拆箱的實(shí)現(xiàn)過程:

裝箱過程是通過調(diào)用包裝器的valueOf方法實(shí)現(xiàn)的,而拆箱過程是通過調(diào)用包裝器的xxxValue方法實(shí)現(xiàn)的。(xxx代表對應(yīng)的基本數(shù)據(jù)類型)。

面試問題

下面這段代碼的輸出結(jié)果是什么?

public class Main {
 public static void main(String[] args) {
 Integer i1 = 100;
 Integer i2 = 100;
 Integer i3 = 200;
 Integer i4 = 200;
 
 System.out.println(i1==i2);
 System.out.println(i3==i4);
 }
}

注意 ==和equals的區(qū)別:
|類型| == |equals
|–|--|–|
| 基本數(shù)據(jù)類型 | 值 | 不可用
| 包裝類 | 地址 | 內(nèi)容

輸出的結(jié)果為:

true
false

為什么會出現(xiàn)這樣的結(jié)果?輸出結(jié)果表明 i1 和 i2 指向的是同一個(gè)對象,而 i3 和 i4 指向的是不同的對象。此時(shí)只需一看源碼便知究竟,下面這段代碼是Integer的valueOf方法的具體實(shí)現(xiàn):

public static Integer valueOf(int i) {
 if(i >= -128 && i <= IntegerCache.high)
  return IntegerCache.cache[i + 128];
 else
  return new Integer(i);
 }

從這2段代碼可以看出,在通過valueOf方法創(chuàng)建Integer對象的時(shí)候,如果數(shù)值在 [-128,127] 之間,便返回指向IntegerCache.cache中已經(jīng)存在的對象的引用;否則創(chuàng)建一個(gè)新的Integer對象。

上面的代碼中 i1 和 i2 的數(shù)值為100,因此會直接從cache中取已經(jīng)存在的對象,所以 i1 和 i2 指向的是同一個(gè)對象,而 i3 和 i4 則是分別指向不同的對象。

下面這段代碼的輸出結(jié)果是什么?

public class Main {
 public static void main(String[] args) {
 Double i1 = 100.0;
 Double i2 = 100.0;
 Double i3 = 200.0;
 Double i4 = 200.0;
 
 System.out.println(i1==i2);
 System.out.println(i3==i4);
 }
}

也許有的朋友會認(rèn)為跟上面一道題目的輸出結(jié)果相同,但是事實(shí)上卻不是。實(shí)際輸出結(jié)果為:

false
false

至于具體為什么,讀者可以去查看Double類的valueOf的實(shí)現(xiàn)。
在這里只解釋一下為什么Double類的valueOf方法會采用與Integer類的valueOf方法不同的實(shí)現(xiàn)。很簡單:在某個(gè)范圍內(nèi)的整型數(shù)值的個(gè)數(shù)是有限的,而浮點(diǎn)數(shù)卻不是。

注意,Integer、Short、Byte、Character、Long這幾個(gè)類的valueOf方法的實(shí)現(xiàn)是類似的,Double、Float的valueOf方法的實(shí)現(xiàn)是類似的

以上所述是小編給大家介紹的Java包裝類及自動(dòng)裝箱拆箱詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI)

    淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI)

    這篇文章主要介紹了淺談在Spring中如何使用數(shù)據(jù)源(DBCP、C3P0、JNDI),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Spring Boot的filter(過濾器)簡單使用實(shí)例詳解

    Spring Boot的filter(過濾器)簡單使用實(shí)例詳解

    過濾器(Filter)的注冊方法和 Servlet 一樣,有兩種方式:代碼注冊或者注解注冊,下面通過實(shí)例給大家介紹Spring Boot的filter(過濾器)簡單使用,一起看看吧
    2017-04-04
  • Java線程池隊(duì)列PriorityBlockingQueue和SynchronousQueue詳解

    Java線程池隊(duì)列PriorityBlockingQueue和SynchronousQueue詳解

    這篇文章主要為大家介紹了Java線程池隊(duì)列PriorityBlockingQueue和SynchronousQueue詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 利用Java代碼寫一個(gè)并行調(diào)用模板

    利用Java代碼寫一個(gè)并行調(diào)用模板

    這篇文章主要介紹了利用Java代碼寫一個(gè)并行調(diào)用模板,文章基于Java的相關(guān)內(nèi)容展開寫一個(gè)并行調(diào)用模板的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Java實(shí)現(xiàn)阿里云短信接口的示例

    Java實(shí)現(xiàn)阿里云短信接口的示例

    這篇文章主要介紹了Java實(shí)現(xiàn)阿里云短信接口的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • springmvc配置線程池Executor做多線程并發(fā)操作的代碼實(shí)例

    springmvc配置線程池Executor做多線程并發(fā)操作的代碼實(shí)例

    今天小編就為大家分享一篇關(guān)于springmvc配置線程池Executor做多線程并發(fā)操作的代碼實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳解RestTemplate?用法

    詳解RestTemplate?用法

    RestTemplate?是從?Spring3.0?開始支持的一個(gè)?HTTP?請求工具,也有的稱之為網(wǎng)絡(luò)框架,說白了就是Java版本的一個(gè)postman,這篇文章主要介紹了詳解RestTemplate?用法,需要的朋友可以參考下
    2022-07-07
  • 高可用架構(gòu)etcd選主故障主備秒級切換實(shí)現(xiàn)

    高可用架構(gòu)etcd選主故障主備秒級切換實(shí)現(xiàn)

    這篇文章主要為大家介紹了高可用架構(gòu)etcd選主故障主備秒級切換的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫配置錯(cuò)誤:Public Key Retrieval is not allowed的解決方案

    SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫配置錯(cuò)誤:Public Key Retrieva

    最近的項(xiàng)目,突然都從MySQL5.7升級到8.0了,有些項(xiàng)目能運(yùn)行成功,有些項(xiàng)目遇到了問題,啟動(dòng)不成功,顯示數(shù)據(jù)庫方面的異常信息,本文給大家介紹了SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫配置錯(cuò)誤:Public Key Retrieval is not allowed的解決方案,需要的朋友可以參考下
    2024-04-04
  • IDEA中設(shè)置Tab健為4個(gè)空格的方法

    IDEA中設(shè)置Tab健為4個(gè)空格的方法

    這篇文章給大家介紹了代碼縮進(jìn)用空格還是Tab?(IDEA中設(shè)置Tab健為4個(gè)空格)的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-03-03

最新評論

玉龙| 璧山县| 梧州市| 防城港市| 闽侯县| 呈贡县| 楚雄市| 榆树市| 鸡泽县| 保定市| 措勤县| 措勤县| 万全县| 偃师市| 绥芬河市| 乌拉特中旗| 山阳县| 苍梧县| 伊宁县| 揭阳市| 龙海市| 安塞县| 江阴市| 双柏县| 繁峙县| 吉林市| 彭州市| 达孜县| 双桥区| 涟源市| 富蕴县| 克山县| 富蕴县| 岚皋县| 托里县| 丘北县| 手机| 云梦县| 蕲春县| 皮山县| 青神县|