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

溫馨提示×

溫馨提示×

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

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

java中的裝箱拆箱是什么意思

發布時間:2021-08-06 18:50:40 來源:億速云 閱讀:130 作者:chen 欄目:大數據

這篇文章主要介紹“java中的裝箱拆箱是什么意思”,在日常操作中,相信很多人在java中的裝箱拆箱是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java中的裝箱拆箱是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

通過本文能了解哪些知識?

  • 為什么基本數據類型拆箱有可能會報空指針異常?

  • 基本數據類型的裝箱與拆箱操作是如何實現的?

 

自動拆箱

首先我們有如下代碼:

public class Test{
    static {
        Integer integer = new Integer(1234);
        int i = integer;
    }
}
 

反編譯其對應的class文件,得到如下字節碼:

public class Test {
  public Test();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
    LineNumberTable:
      line 1: 0

  static {};
    Code:
       0: new           #2                  // class java/lang/Integer
       3: dup
       4: sipush        1234
       7: invokespecial #3                  // Method java/lang/Integer."<init>":(I)V
      10: astore_0
      11: aload_0
      12: invokevirtual #4                  // Method java/lang/Integer.intValue:()I
      15: istore_1
      16: return
    LineNumberTable:
      line 3: 0
      line 4: 11
      line 5: 16
}
 

其中int i = integer對應的字節碼如下:

11: aload_0
12: invokevirtual #4                  // Method java/lang/Integer.intValue:()I
15: istore_1
 

可以看出,對于int i = integer,實際上等價于以下語句:

int i = integer.intValue();
 

那么當integer等于null的時候就變為了((Integer)null).intValue()了,自然就會拋出空指針異常了;對于其他基本數據類型也是同樣的原理

 

自動裝箱

首先需要如下代碼:

public class Test{
    static {
        int i = 1234;
        Integer integer = i;
    }
}
 

反編譯其對應的class文件,得到如下字節碼:

public class Test {
  public Test();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
    LineNumberTable:
      line 1: 0

  static {};
    Code:
       0: sipush        1234
       3: istore_0
       4: iload_0
       5: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       8: astore_1
       9: return
    LineNumberTable:
      line 3: 0
      line 4: 4
      line 5: 9
}
 

其中Integer integer = i對應的字節碼如下:

4: iload_0
5: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
8: astore_1
 

也就是對于Integer integer = i語句,實際上等價于:

Integer integer = Integer.valueOf(i);
 

而因為基本數據類型在java中不存在null值,自然對應的自動裝箱操作也就沒有自動裝箱操作的空指針異常風險了。

結論

最后,我們得到如下結論,對于基本數據類型的自動裝箱操作,實際上是使用了Integer.valueOf(int)方法,而對于基本數據類型對應的包裝類型的自動拆箱操作,則是使用了Integer#intValue()方法(注意,此方法是普通方法而不是靜態方法),所以當對應的Integer對象為null時對其進行自動拆箱操作就會有空指針風險;

到此,關于“java中的裝箱拆箱是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

五华县| 梧州市| 名山县| 凤阳县| 桂东县| 永修县| 南开区| 彭州市| 永新县| 咸阳市| 上高县| 凤冈县| 无为县| 桑日县| 莲花县| 长寿区| 五峰| 赤壁市| 南郑县| 丰镇市| 湖北省| 措美县| 游戏| 阿拉善左旗| 周宁县| 樟树市| 上饶市| 乌拉特后旗| 宿松县| 浙江省| 房产| 昭通市| 十堰市| 尉氏县| 乌拉特前旗| 泰来县| 突泉县| 陆河县| 盐城市| 乡城县| 巢湖市|