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