包裝器
包裝器:每一個基本類型對應的都有一個類,比如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。
實現裝箱和拆箱的是編譯器,和虛擬機沒有關係