在Java中,有兩個常見的概念叫做裝箱(Boxing)和拆箱(Unboxing)。裝箱是指將一個基本數(shù)據(jù)類型轉(zhuǎn)換為包裝器類型(整型轉(zhuǎn)為Integer、布爾型轉(zhuǎn)為Boolean等),而拆箱則是相反的操作(將包裝器類型轉(zhuǎn)換為基本數(shù)據(jù)類型)。
那么,在Java中這兩個操作是怎樣實現(xiàn)的呢?其實,最底層的實現(xiàn)還是涉及到基本數(shù)據(jù)類型和包裝器類型之間的轉(zhuǎn)換。
//裝箱 int i = 1; Integer integer = Integer.valueOf(i); //拆箱 Integer integer = new Integer(2); int i = integer.intValue();
在上述代碼中,我們可以看到使用了對應(yīng)包裝器類型的valueOf()和xxxValue()方法,這些方法都是在valueOf()和xxxValue()方法所在的包裝器類型中被定義的。
當我們給一個包裝器類型賦值,或者調(diào)用構(gòu)造方法創(chuàng)建對象時,底層會進行自動裝箱(轉(zhuǎn)換成包裝器類型)。例如:
Integer integer1 = 1; //自動裝箱 Boolean boolean1 = true; //自動裝箱
而拆箱則和裝箱類似,只是方向相反。當我們需要獲取一個包裝器類型中的基本數(shù)據(jù)類型時,就需要使用xxxValue()方法進行拆箱。例如:
Integer integer2 = new Integer(3); int i = integer2.intValue(); //手動拆箱
在對于Java的裝箱和拆箱進行深入學(xué)習(xí)之前,了解底層實現(xiàn)原理對于理解和使用其它高級特性會有很大的幫助。