//1-----
Integer integer = 10;
//2-----
int i = 10;
Integer integer = i;
//3-----
Number number = 3.14f;
//使用更一般話的Java.lang.Number類來自動裝箱,3.14f會先自動裝箱爲Float,然後指定給number
自動拆箱
Integer a = 10;
int b = a;
自動裝箱和拆箱是“編譯器蜜糖(Compiler Sugar)”:
Integer i = null;
int j = i;
上面的語法在編譯時不會出錯,但在運行時相當於
Integer i = null;
int j = i.intValue();
會出錯!!!i並沒有參考至任何的對象,所以不能操作intValue()方法,會出現NullPointerException。
public class AutoBoxDemo{
public static void main(String[] args){
Interger i1 = 100;
Interger i2 = 100;
if(i1 == i2)
System.out.println("i1==i2");
else
System.out.println("i1!=i2");
}
}
顯示i1==i2
但是把i1和i2的值改爲200,顯示結果就爲i1!=i2.
事實上==也用於判斷兩個對象變量名稱是否參考同一個對象。在自動裝箱時對於值從-128到127之間的值,他們被裝箱爲Integer後,會存在內存中被重用,所以在使用==進行比較時,100的值,i1和i2會參考至同一個對象。如果超過-128到127之間的值,被裝箱後Integer對象並不會重用,即相當於每次裝箱時都新建一個Integer對象,所以在200值時用==進行比較i1和i2時參考不同的對象。