中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Java中自動裝箱和自動拆箱原理剖析

發布時間:2021-12-03 16:10:35 來源:億速云 閱讀:139 作者:柒染 欄目:大數據

如何進行Java中自動裝箱和自動拆箱原理剖析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

Java中數據類型可以劃分為兩種,一種是Primitive Type(基本類型),另外一種是Reference Type(引用類型)。基本類型的數值不是Object對象,不能調用對象的toString()、getClass()等方法。Java提供了針對每種基本類型的包裝類型,如下圖所示:

如何進行Java中自動裝箱和自動拆箱原理剖析

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

自動裝箱 Java 八種基本數據類型在某些條件下使用會自動變為對應的包裝器類型,舉例 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));

}

輸出結果如圖:

如何進行Java中自動裝箱和自動拆箱原理剖析

1.當包裝器類型進行“==”比較時,i3會調用 Integer.valueOf() 自動裝箱基本數據類型為包裝器類型,源碼如下:

如何進行Java中自動裝箱和自動拆箱原理剖析

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

2.Integer包裝類實現 equals 方法中,只要比較的當前對象是 Integer 實例就會自動拆箱為基本數據類型。Integer類的equals方法的源碼如下:

如何進行Java中自動裝箱和自動拆箱原理剖析

而其他類型實現如下:

1)Integer、Short、Byte、Character、Long這幾個包裝類 valueOf() 或者 intValue() 方法實現類似

2)Double、Float的 valueOf() 或者 intValue() 方法的實現類似

3)Boolean的 valueOf() 或者 intValue() 方法實現是個三目運算,如 return (b ? TRUE : FALSE);

自動拆箱 Java 八種包裝器類型在某些條件下使用會自動變為對應的基本數據類型,舉例 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));

}

輸出結果如圖:

如何進行Java中自動裝箱和自動拆箱原理剖析

程序執行時i4會調用 Integer.intValue() 方法自動拆箱包裝器類型為基本數據類型,源碼如下:

如何進行Java中自動裝箱和自動拆箱原理剖析

包裝器類型和基本數據類型進行“==”比較時,包裝器類型會自動拆箱為基本數據類型。

源碼參考:http://blog.yoodb.com/yoodb/article/detail/1085,微信“引用”功能,會導致java編碼格式問題,建議手動敲寫代碼或者源碼參考此路徑。

注意:equals() 比較的是兩個對象的值(內容)是否相同,而 "==" 比較的是兩個對象的引用(內存地址)是否相同,也用來比較兩個基本數據類型(int)的變量值是否相等。“==”運算符的兩個操作數都是包裝器類型的引用時比較指向的是否是同一個對象,而其中有一個操作數是表達式(即包含算術運算)則比較的是數值(即會觸發自動拆箱的過程),對于包裝器類型 equals 方法并不會進行類型轉換。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

咸丰县| 建水县| 抚顺市| 上高县| 常德市| 宜城市| 含山县| 丹东市| 宝应县| 高碑店市| 和平县| 屏东县| 贡山| 宁都县| 南投市| 井冈山市| 安达市| 桂平市| 上虞市| 永德县| 沂水县| 茌平县| 剑川县| 禄丰县| 马关县| 渝中区| 岢岚县| 晋州市| 平谷区| 吐鲁番市| 高清| 汉沽区| 陇南市| 江津市| 镇平县| 秦皇岛市| 无极县| 晴隆县| 孟津县| 岚皋县| 微山县|