《java學習筆記》讀書筆記の小心使用Boxing

自動裝箱和拆箱的功能,在J2SE 5.0之後提供了自動裝箱的功能
//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時參考不同的對象。
發佈了26 篇原創文章 · 獲贊 0 · 訪問量 721
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章