91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

济宁市| 托里县| 湘潭市| 宜黄县| 宝坻区| 辽阳县| 山东| 东乌珠穆沁旗| 鄂伦春自治旗| 平湖市| 德令哈市| 娱乐| 黄山市| 友谊县| 登封市| 肥乡县| 亚东县| 化州市| 临西县| 连城县| 阜平县| 泽库县| 德安县| 林芝县| 科技| 醴陵市| 石柱| 五峰| 新河县| 汾西县| 凌源市| 昌图县| 赣州市| 安溪县| 普兰店市| 商都县| 客服| 甘孜县| 江陵县| 高青县| 桓仁|