從 JDK 5 開始, Java 增加了兩個(gè)重要特性: 自動(dòng)裝箱和自動(dòng)拆箱.
自動(dòng)裝箱時(shí)這樣一個(gè)過程: 無論何時(shí), 只需要基本類型的對象, 就是自動(dòng)將基本類型自動(dòng)封裝(裝箱)到與之等價(jià)的封裝器中, 而不需要顯式的構(gòu)造對象.
自動(dòng)拆箱是當(dāng)需要時(shí)自動(dòng)抽取(拆箱)已裝箱對象的數(shù)值的過程. 不需要調(diào)用 intValue()
這類的方法.
有了自動(dòng)裝箱特性, 封裝基本類型將不必再手動(dòng)創(chuàng)建對象. 只需要將數(shù)值賦給類型封裝器引用即可, Java 會(huì)自動(dòng)創(chuàng)建對象. 例如, 下面是構(gòu)造具有數(shù)值 100 的 Integer 對象的現(xiàn)代方式:
Integer iOb = 100;
注意沒有使用 new
顯式的創(chuàng)建對象. Java 自動(dòng)處理了這個(gè)過程.
為了拆箱對象, 可以簡單的將對象引用賦值給基本類型的變量. 例如, 為了拆箱 iOb, 可以使用下面這行代碼:
int i = iOb;
表達(dá)式中發(fā)生的自動(dòng)裝箱/拆箱
通常無論何時(shí), 當(dāng)需要將基本類型轉(zhuǎn)換為對象或?qū)ο筠D(zhuǎn)換為基本類型時(shí), 就會(huì)發(fā)生自動(dòng)裝箱和拆箱. 對于表達(dá)式也是如此. 在表達(dá)式中, 數(shù)值對象會(huì)被自動(dòng)拆箱, 如果需要的話, 還可以對表達(dá)式的輸出進(jìn)行重新裝箱.
public static void main(String[] args) {
Integer iOb = 100;
System.out.println("Original value of iOb: " + iOb);
++iOb;
System.out.println("After ++iOb: " + iOb);
}
輸出如下所示:
Original value of iOb: 100
After ++iOb: 101
在這個(gè)程序中, 應(yīng)特別注意下面這行代碼:
++iOb;
這會(huì)導(dǎo)致 iOb
中的值遞增. 具體工作過程如下: 將 iOb 自動(dòng)拆箱, 將值遞增, 然后將結(jié)果自動(dòng)裝箱.