自動裝箱和自動拆箱——源碼分析

自動裝箱和拆箱是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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章