自動裝箱和拆箱

包裝器

包裝器:每一個基本類型對應的都有一個類,比如int對應的Integer類,這些類稱爲包裝器(wrapper)。

對象包裝器類是不可變的,即一旦構造了包裝器,包裝在其中的值就不允許改變。。同時,對象包裝器類還是final,因此不可以定義它們的子類。

ArrayList尖括號中的類型參數不可以是基本類型,這時候就需要包裝器。

自動裝箱

爲了便於添加int類型的元素到ArrayList中,有一個稱爲自動裝箱的特性。

ArraryList<Integer> list = new ArrayList<>();

list.add(2);
//自動裝箱會將這句自動變換爲
//list.add(Integer.valueOf(2));

同樣的,將Integer對象賦值給int值時,會自動拆箱。

int n = list.get(i);
//自動拆箱爲
//int n = list.get(i).intValue();

其次,在算術表達式、類型轉換中會 自動拆箱->運算->自動裝箱。

Integer n = 3;
//自動拆箱後運算
n++;
//運算完成後自動裝箱

Integer a = 1;
Double b = 2.0;
//a自動拆箱,提升爲Double,然後自動裝箱
System.out.println(true?a:b);
//?前爲判斷條件,true則輸出:前,false則輸出:

需要注意的是,比較包裝類需要調用equals。

實現裝箱和拆箱的是編譯器,和虛擬機沒有關係

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章