溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java之怎么正確地對(duì)包裝類(lèi)進(jìn)行裝箱與拆箱

發(fā)布時(shí)間:2023-04-28 17:56:55 來(lái)源:億速云 閱讀:145 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Java之怎么正確地對(duì)包裝類(lèi)進(jìn)行裝箱與拆箱”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Java之怎么正確地對(duì)包裝類(lèi)進(jìn)行裝箱與拆箱”文章能幫助大家解決問(wèn)題。

    一. 裝箱

    1. 概念

    所謂的裝箱(Boxing),其實(shí)就是將基本類(lèi)型轉(zhuǎn)換成包裝類(lèi),例如把double變成Double。裝箱分為手動(dòng)裝箱和自動(dòng)裝箱(Auto Boxing),如果我們手動(dòng)實(shí)例化一個(gè)包裝類(lèi),這就是手動(dòng)裝箱。在JDK 1.5之前,必須進(jìn)行手動(dòng)裝箱;JDK 1.5之后,可以進(jìn)行自動(dòng)裝箱,不用再進(jìn)行手工操作,這就簡(jiǎn)化了開(kāi)發(fā),提供了方便。

    2. 案例

    下面的案例是手動(dòng)裝箱和自動(dòng)裝箱的實(shí)現(xiàn)過(guò)程。在JDK 1.5前后,裝箱有手動(dòng)裝箱和自動(dòng)裝箱之分,大家要注意。

    public class BoxTest {
        public static void main(String[] args) {
    	//JDK 1.5之前的拆裝箱過(guò)程--手動(dòng)拆裝箱
    	byte b = 10;
    	//手動(dòng)裝箱
    	Byte b1 = Byte.valueOf(b);
    	System.out.println("手動(dòng)裝箱后的結(jié)果,b1="+b1);
            //手動(dòng)裝箱的另一種形式
    	int m = 100;
            Integer obj = new Integer(m);  
            //手動(dòng)拆箱的另一種形式
            int n = obj.intValue(); 
            System.out.println("n = " + n);
    	//JDK 1.5之后的拆裝箱過(guò)程--自動(dòng)拆裝箱        
    	int i = 10;
    	//自動(dòng)裝箱
    	Integer i001 = i;
    	System.out.println("自動(dòng)裝箱后的結(jié)果,i001="+i001);
        }
    }

    二. 拆箱

    1. 概念

    所謂的拆箱(Unboxing),其實(shí)就是將包裝類(lèi)型轉(zhuǎn)換成基本類(lèi)型,例如把Double變成double。同樣的,拆箱也分為手動(dòng)拆箱和自動(dòng)拆箱(Auto Boxing),手動(dòng)實(shí)例化操作包裝類(lèi),就是手動(dòng)拆箱。在JDK 1.5之前必須手動(dòng)進(jìn)行拆箱,JDK 1.5之后就可以自動(dòng)拆箱了。

    2. 案例

    下面的案例是手動(dòng)拆箱和自動(dòng)拆箱的實(shí)現(xiàn)過(guò)程。在JDK 1.5前后,拆箱有手動(dòng)拆箱和自動(dòng)拆箱之分,大家要注意。

    public class BoxTest {
        public static void main(String[] args) {
    	//JDK 1.5之前的拆裝箱過(guò)程--手動(dòng)拆裝箱
    	byte b = 10;
    	//手動(dòng)裝箱
    	Byte b1 = Byte.valueOf(b);
    	System.out.println("手動(dòng)裝箱后的結(jié)果,b1="+b1);
    	//手動(dòng)拆箱
    	byte b2 = b1.byteValue();
    	System.out.println("手動(dòng)拆箱后的結(jié)果="+b2);
    	//JDK 1.5之后的拆裝箱過(guò)程--自動(dòng)拆裝箱        
    	int i = 10;
    	//自動(dòng)裝箱
    	Integer i001 = i;
    	System.out.println("自動(dòng)裝箱后的結(jié)果,i001="+i001);
    	//自動(dòng)拆箱
    	int i002 = i001;
    	System.out.println("自動(dòng)拆箱后的結(jié)果,i002="+i002);
        }
    }

    3. 小結(jié)

    我們要注意,自動(dòng)裝箱和自動(dòng)拆箱只發(fā)生在編譯階段,其目的是為了減少代碼的編寫(xiě)。從性能上來(lái)看,裝箱和拆箱的過(guò)程會(huì)影響代碼的執(zhí)行效率,因?yàn)榫幾g后的class代碼是嚴(yán)格區(qū)分基本類(lèi)型和引用類(lèi)型的,所以編譯階段的裝箱和拆箱,在編譯后還是要回歸原始。另外在自動(dòng)拆箱時(shí),如果賦值不當(dāng),有可能會(huì)產(chǎn)生NullPointerException異常,如下所示:

    Integer n = null;
    //這里就會(huì)產(chǎn)生NPE空指針異常
    int m = n;

    關(guān)于“Java之怎么正確地對(duì)包裝類(lèi)進(jìn)行裝箱與拆箱”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI