首頁 > Java > java教程 > 主體

如何正確地進行Java中包裝類別的裝箱和拆箱操作?

PHPz
發布: 2023-05-10 08:43:27
轉載
1622 人瀏覽過

    一. 裝箱

    1.概念

    所謂的裝箱(Boxing),其實就是將基本型別轉換成包裝類,例如把double變成Double。裝箱分為手動裝箱和自動裝箱(Auto Boxing),如果我們手動實例化一個包裝類,這就是手動裝箱。在JDK 1.5之前,必須進行手動裝箱;JDK 1.5之後,可以進行自動裝箱,不用再進行手工操作,這就簡化了開發,提供了方便。

    2. 案例

    下面的案例是手動裝箱和自動裝箱的實作過程。在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);
        }
    }
    登入後複製

    二. 拆箱

    1. 概念

    所謂的拆箱(Unboxing),其實就是將包裝型別轉換成基本型,例如把Double變成double 。同樣的,拆箱也分為手動拆箱和自動拆箱(Auto Boxing),手動實例化操作包裝類,就是手動拆箱。在JDK 1.5之前必須手動進行拆箱,JDK 1.5之後就可以自動拆箱了。

    2. 案例

    下面的案例是手動拆箱和自動拆箱的實作過程。在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);
        }
    }
    登入後複製

    3. 小結

    我們要注意,自動裝箱和自動拆箱只發生在編譯階段,其目的是為了減少程式碼的編寫。從效能來看,裝箱和拆箱的過程會影響程式碼的執行效率,因為編譯後的class程式碼是嚴格區分基本型別和引用型別的,所以編譯階段的裝箱和拆箱,在編譯後還是要回歸原始。另外在自動拆箱時,如果賦值不當,有可能會產生NullPointerException異常,如下:

    Integer n = null;
    //这里就会产生NPE空指针异常
    int m = n;
    登入後複製

    以上是如何正確地進行Java中包裝類別的裝箱和拆箱操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板