IntegerJDK5.0新特性有趣現象

 IntegerJDK5.0新特性有趣現象


 

在JDK5.0中,爲了簡化書寫,出現了自動裝箱和拆箱機制。

 

原來的寫法:

Integer i = new Integer(5);


Java視頻教程下載                    Java培訓                 Java


新的寫法:

Integer i = 5;//自動裝箱,內部運行時,通過Integer.valueOf(5);方法將5封裝成Integer對象。

 

i + 3; i是一個對象,無法直接和5進行加法運算,必須先轉成基本數據類型,通過調用i對象的intValue()方法。

 

 

有趣的現象:

Integer i1 = 5;

Integer i2 = 5;

 

System.out.println(i1==i2);//true 爲什麼呢?

 

當給i1,i2重新賦值,

Integer i1 = 500;

Integer i2 = 500;

System.out.println(i1==i2);//false?

 

這時最好去查看裝箱的原理Integer.valueOf()方法是怎麼實現。

valueOf源碼:

public static Integer valueOf(int i){

 if(i >= -128 && i <= IntegerCache.high)

  return IntegerCache.cache[i + 128];

 else

  return new Integer(i);

}

 

IntegerCache是Integer中的一個內部類。

IntegerCache.high的值就是127.

 

通過源碼不難看出,IntegerCache將-128~127之間的數值對象進行了緩存。

如果裝箱的數值在該範圍內,它並不創建一個新對象,而是返回一個緩存中已有對象。

所以值爲5時,正好在該範圍內,i1和i2引用的是同一個對象。

值爲500時,在該範圍以外,i1和i2引用的是不同對象。

 

歐了。


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