自動裝箱和拆箱是Java提供給程序員的語法糖,方便了程序員開發,Java爲每種基本數據類型都提供了對應的包裝器類型。Integer和int類型變量的相互轉換,代碼如下所示:
Integer i = 1;
int j = i;
int m = 2;
Integer n = m;
但是既然是語法糖,那就意味着編譯器幫助程序員完成了一些看不到的工作,通過javap反編譯可以看到執行指令在自動裝箱的時候,Java虛擬機會自動調用Integer的valueOf方法,而在自動拆箱的時候,Java虛擬機會自動調用Integer的intValue方法。那麼這兩個方法到底做了什麼呢,源碼如下所示:
public static Integer valueOf(int i) {
//如果i在[-128,127]之間,則返回int緩存值
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
//否則創建一個實例
return new Integer(i);
}
private final int value;
public Integer(int value) {
this.value = value;
}
public int intValue() {
//將構造方法中的value返回
return value;
}