如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析

如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

10年積累的成都做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有懷仁免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

Java中數(shù)據(jù)類型可以劃分為兩種,一種是Primitive Type(基本類型),另外一種是Reference Type(引用類型)?;绢愋偷臄?shù)值不是Object對(duì)象,不能調(diào)用對(duì)象的toString()、getClass()等方法。Java提供了針對(duì)每種基本類型的包裝類型,如下圖所示:

如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析

Java 基本數(shù)據(jù)(Primitive)類型的自動(dòng)裝箱(autoboxing)、拆箱(autounboxing)是自J2SE 5.0開(kāi)始提供的功能。Java語(yǔ)言規(guī)范中提到在很多情況下自動(dòng)裝箱和自動(dòng)拆箱是由編譯器自行完成的。該情況下包裝成為裝箱,解包裝稱為拆箱。

自動(dòng)裝箱 Java 八種基本數(shù)據(jù)類型在某些條件下使用會(huì)自動(dòng)變?yōu)閷?duì)應(yīng)的包裝器類型,舉例 Integer(int)類型如下:

@Test

    public void boxing(){

    Integer i1 = 10;

    Integer i2 = 10;

    Integer i3 = 128;

    Integer i4 = 128;

    System.out.println("i1==i2: " + (i1 == i2));

    System.out.println("i3==i4: " + (i3 == i4));

    System.out.println("i1.equals(i2): " + i1.equals(i2));

    System.out.println("i3.equals(i4): " + i3.equals(i4));

}

輸出結(jié)果如圖:

如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析

1.當(dāng)包裝器類型進(jìn)行“==”比較時(shí),i3會(huì)調(diào)用 Integer.valueOf() 自動(dòng)裝箱基本數(shù)據(jù)類型為包裝器類型,源碼如下:

如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析

Integer 對(duì)象自動(dòng)緩存int值范圍在low~high(-128~127),如果超出這個(gè)范圍則會(huì)自動(dòng)裝箱為包裝類。

2.Integer包裝類實(shí)現(xiàn) equals 方法中,只要比較的當(dāng)前對(duì)象是 Integer 實(shí)例就會(huì)自動(dòng)拆箱為基本數(shù)據(jù)類型。Integer類的equals方法的源碼如下:

如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析

而其他類型實(shí)現(xiàn)如下:

1)Integer、Short、Byte、Character、Long這幾個(gè)包裝類 valueOf() 或者 intValue() 方法實(shí)現(xiàn)類似

2)Double、Float的 valueOf() 或者 intValue() 方法的實(shí)現(xiàn)類似

3)Boolean的 valueOf() 或者 intValue() 方法實(shí)現(xiàn)是個(gè)三目運(yùn)算,如 return (b ? TRUE : FALSE);

自動(dòng)拆箱 Java 八種包裝器類型在某些條件下使用會(huì)自動(dòng)變?yōu)閷?duì)應(yīng)的基本數(shù)據(jù)類型,舉例 int(Integer)類型如下:

@Test

public void boxing(){

    Integer i1 = 10;

    int i2 = 10;

    int i3 = 128;

    Integer i4 = 128;

    System.out.println("i1==i2: " + (i1 == i2));

    System.out.println("i3==i4: " + (i3 == i4));

}

輸出結(jié)果如圖:

如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析

程序執(zhí)行時(shí)i4會(huì)調(diào)用 Integer.intValue() 方法自動(dòng)拆箱包裝器類型為基本數(shù)據(jù)類型,源碼如下:

如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析

包裝器類型和基本數(shù)據(jù)類型進(jìn)行“==”比較時(shí),包裝器類型會(huì)自動(dòng)拆箱為基本數(shù)據(jù)類型。

源碼參考:http://blog.yoodb.com/yoodb/article/detail/1085,微信“引用”功能,會(huì)導(dǎo)致java編碼格式問(wèn)題,建議手動(dòng)敲寫(xiě)代碼或者源碼參考此路徑。

注意:equals() 比較的是兩個(gè)對(duì)象的值(內(nèi)容)是否相同,而 "==" 比較的是兩個(gè)對(duì)象的引用(內(nèi)存地址)是否相同,也用來(lái)比較兩個(gè)基本數(shù)據(jù)類型(int)的變量值是否相等?!?=”運(yùn)算符的兩個(gè)操作數(shù)都是包裝器類型的引用時(shí)比較指向的是否是同一個(gè)對(duì)象,而其中有一個(gè)操作數(shù)是表達(dá)式(即包含算術(shù)運(yùn)算)則比較的是數(shù)值(即會(huì)觸發(fā)自動(dòng)拆箱的過(guò)程),對(duì)于包裝器類型 equals 方法并不會(huì)進(jìn)行類型轉(zhuǎn)換。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)頁(yè)標(biāo)題:如何進(jìn)行Java中自動(dòng)裝箱和自動(dòng)拆箱原理剖析
分享地址:http://bm7419.com/article42/igoshc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、企業(yè)網(wǎng)站制作微信公眾號(hào)、網(wǎng)站策劃、網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)