所謂的裝箱(Boxing),其實就是將基本型別轉換成包裝類,例如把double變成Double。裝箱分為手動裝箱和自動裝箱(Auto Boxing),如果我們手動實例化一個包裝類,這就是手動裝箱。在JDK 1.5之前,必須進行手動裝箱;JDK 1.5之後,可以進行自動裝箱,不用再進行手工操作,這就簡化了開發,提供了方便。
下面的案例是手動裝箱和自動裝箱的實作過程。在JDK 1.5前後,裝箱有手動裝箱和自動裝箱之分,大家要注意。
public class BoxTest { public static void main(String[] args) { //JDK 1.5之前的拆装箱过程--手动拆装箱 byte b = 10; //手动装箱 Byte b1 = Byte.valueOf(b); System.out.println("手动装箱后的结果,b1="+b1); //手动装箱的另一种形式 int m = 100; Integer obj = new Integer(m); //手动拆箱的另一种形式 int n = obj.intValue(); System.out.println("n = " + n); //JDK 1.5之后的拆装箱过程--自动拆装箱 int i = 10; //自动装箱 Integer i001 = i; System.out.println("自动装箱后的结果,i001="+i001); } }
所謂的拆箱(Unboxing),其實就是將包裝型別轉換成基本型,例如把Double變成double 。同樣的,拆箱也分為手動拆箱和自動拆箱(Auto Boxing),手動實例化操作包裝類,就是手動拆箱。在JDK 1.5之前必須手動進行拆箱,JDK 1.5之後就可以自動拆箱了。
下面的案例是手動拆箱和自動拆箱的實作過程。在JDK 1.5前後,拆箱有手動拆箱和自動拆箱之分,大家要注意。
public class BoxTest { public static void main(String[] args) { //JDK 1.5之前的拆装箱过程--手动拆装箱 byte b = 10; //手动装箱 Byte b1 = Byte.valueOf(b); System.out.println("手动装箱后的结果,b1="+b1); //手动拆箱 byte b2 = b1.byteValue(); System.out.println("手动拆箱后的结果="+b2); //JDK 1.5之后的拆装箱过程--自动拆装箱 int i = 10; //自动装箱 Integer i001 = i; System.out.println("自动装箱后的结果,i001="+i001); //自动拆箱 int i002 = i001; System.out.println("自动拆箱后的结果,i002="+i002); } }
我們要注意,自動裝箱和自動拆箱只發生在編譯階段,其目的是為了減少程式碼的編寫。從效能來看,裝箱和拆箱的過程會影響程式碼的執行效率,因為編譯後的class程式碼是嚴格區分基本型別和引用型別的,所以編譯階段的裝箱和拆箱,在編譯後還是要回歸原始。另外在自動拆箱時,如果賦值不當,有可能會產生NullPointerException異常,如下:
Integer n = null; //这里就会产生NPE空指针异常 int m = n;
以上是如何正確地進行Java中包裝類別的裝箱和拆箱操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!