欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java學(xué)習(xí)之理解自動拆裝箱特性

 更新時間:2021年09月16日 09:15:36   作者:趙清詩  
這篇文章主要介紹java自動拆裝箱特性以及java自動拆裝箱的應(yīng)用,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪

一、自動裝拆箱是什么?

  • 有時,需要將int這樣的基本類型轉(zhuǎn)換為對象。所有的基本類型都有一個與之對應(yīng)的類,例如 Integer類對應(yīng)基本類型int。通常,這些類被稱為包裝器。
  • 這些包裝類對應(yīng)基本數(shù)據(jù)類型:
    Integer , Long , Float , Short , Byte, Charater , Boolen;
    (前六個類派生于公共的超類Number)
  • 包裝類是不可變的,即一旦構(gòu)造了包裝器,就不允許更改包裝在其中的值,同時,包裝類還是final,因此不能派生他的子類。

二、拆裝箱的使用

1.引入包裝類的原因:

包裝成對象后更加方便操作,比如可以直接封裝一些方法放在類中方便使用:比如,將一個數(shù)字字符串s轉(zhuǎn)換成數(shù)值 可以使用:int x = Integer.parseInt(s)或者能方便將數(shù)據(jù)加入集合:假如想要定義一個整型數(shù)組列表。遺憾的是,尖括號中的類型參數(shù)不允許是基本類型,也就是說,不允許寫成如 ArrayList,這里就可以用到Integer 包裝類。
我們可以聲明一個Integer對象的數(shù)組列表:
ArrayList list = new ArrayList()

注:由于每個值分別包裝在對象中,所以ArrayList的執(zhí)行效率遠低于int[ ]數(shù)組。因此,只有當(dāng)操作的方便性比執(zhí)行效率更重要時,才會考慮對較小的集合使用這種構(gòu)造

2.自動拆裝箱的運用

1.對于向ArrayList()中添加int類型的元素 就可以用到自動裝箱的特性,下面這個調(diào)用:
list.add(3);
將自動變換成:
list.add(Integer.valueOf(3));
這就是 自動裝箱(autoboxing)

2.相反的 當(dāng)將一個Integer對象賦給一個int值時,將會自動拆箱。也就是說,編譯器將以下語句:
int n=list.get(i);
轉(zhuǎn)換成:
int n =list.get(i).intValue();
這就是 自動拆箱

3.一些典型舉例

1.自動拆裝箱適用于算術(shù)表達式。例如,可以將自增運算符應(yīng)用于包裝類引用:
Integer n =1;
n++;
編譯器將自動插入一條對象拆箱的指令,然后進行自增運算,最后再將結(jié)果拆箱。

2.==運算符和包裝類聯(lián)用的注意
(以下內(nèi)容談到了 運行時常量池,如果需要搞清楚請移步這篇文章)

傳送門  運行時常量池理解

(1)自動裝箱常見的就是valueOf這個方法,自動拆箱就是intValue方法。在它們的源碼中有一段代碼定義了包裝類的緩沖區(qū)。除了兩個包裝類Long和Double 沒有實現(xiàn)這個緩存技術(shù),其它的包裝類均實現(xiàn)了它。
如下代碼:

Integer i1 = 40;
Integer i2 = 40;
Double i3 = 40.0;
Double i4 = 40.0;
System.out.println("i1=i2   " + (i1 == i2));
System.out.println("i3=i4   " + (i3 == i4));

-----結(jié)果----
true
false

原理如下:
“==” 這個運算在不出現(xiàn)算數(shù)運算符的情況下 不會自動拆箱,所以i1 和 i 2它們不是數(shù)值進行的比較,仍然是比較地址是否指向同一塊內(nèi)存,在integer源碼中緩沖區(qū)的范圍是-128-127之間,在此范圍內(nèi)只要不new對象,那么數(shù)值的地址都是相同的,都在常量池區(qū)域。而Double沒有設(shè)置緩沖區(qū),自然i3 i4的地址不相同。
所以包裝類對象比較時最好調(diào)用equals方法。

3.(1)由于包裝類引用可以為NULL,所以自動裝箱有可能會拋出一個NullPointerException異常:
eg:Integer n =null; System.out.println(2*n);
(2)另外,如果在一個條件表達式中混合使用Integer和Double類型,Integer值會拆箱,提升為double再裝箱為Double;

引用--《java核心技術(shù)卷一》

以上就是java學(xué)習(xí)之理解自動拆裝箱特性的詳細內(nèi)容,更多關(guān)于java自動拆裝箱的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論