一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java三目運算中隱藏的自動拆裝箱

Java三目運算中隱藏的自動拆裝箱

2021-06-11 13:32by Boyizmen Java教程

這篇文章主要介紹了Java三目運算中隱藏的自動拆裝箱,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

最近修改線上bug的時候排查了一個十分隱藏的bug,直接上代碼:

?
1
2
3
integer a = null;
boolean flag = true;
integer b = flag ? a : 0;

乍一看是沒什么毛病的,但是已運行就會發現報空指針,在idea里面也會警告可能有空指針,這是什么原因呢?

直接看字節碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0: aconst_null
1: astore_1
2: iconst_1
3: istore_2
4: iload_2
5: ifeq     15
8: aload_1
9: invokevirtual #2       // method java/lang/integer.intvalue:()i
12: goto     16
15: iconst_0
16: invokestatic #3      // method java/lang/integer.valueof:(i)ljava/lang/integer;
19: astore_3
20: getstatic   #4      // field java/lang/system.out:ljava/io/printstream;
23: aload_3
24: invokevirtual #5      // method java/io/printstream.println:(ljava/lang/object;)v
27: return

可以看到字節碼中調用了`integer.valueof()`方法,因為我們代碼中一個值使用的是0(基本數據類型int),編譯器就會進行自動拆裝箱(成int),

雖然三目運算的后面邏輯不會執行,但是隱藏的自動拆裝箱會執行`integer.valueof()`方法,也就有了空指針異常。

為了進一步驗證存在自動拆裝箱,把代碼修改一下:

?
1
2
3
integer a = null;
boolean flag = true;
integer b = flag ? a : new integer(0);

再看字節碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0: aconst_null
1: astore_1
2: iconst_1
3: istore_2
4: iload_2
5: ifeq     12
8: aload_1
9: goto     20
12: new      #2      // class java/lang/integer
15: dup
16: iconst_0
17: invokespecial #3      // method java/lang/integer."<init>":(i)v
20: astore_3
21: getstatic   #4      // field java/lang/system.out:ljava/io/printstream;
24: aload_3
25: invokevirtual #5      // method java/io/printstream.println:(ljava/lang/object;)v

可以看到,由于重新創建了一個`integer`對象,并沒有基本類型的存在,也就不存在自動拆裝箱,修改過后的代碼也就不會有問題了,但是idea的警告依舊存在。

這是一個非常隱蔽,也非常容易忽略和踩坑的一個地方,三目運算符的使用應該保證后面的值都是常量,或者統一類型,不然就會出現上面的情況。

更甚三目運算符本身提供的作用也不過是為了簡化邏輯,在其中放入過多的邏輯判斷也就違背了其初衷。

總結

以上所述是小編給大家介紹的java三目運算中隱藏的自動拆裝箱,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

原文鏈接:https://minei.me/archives/422.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费视频片在线观看大片 | 亚洲va精品中文字幕 | 国产综合亚洲专区在线 | 日本特级大片 | 亚洲嫩模吧粉嫩粉嫩冒白浆 | 四虎最新紧急更新地址 | 国产免费一区不卡在线 | 亚洲视频999| 5g影院天天影院天天爽影院网站 | 日本 在线播放 | 日本卡一卡2卡3卡4精品卡无人区 | 国产乱码免费卡1卡二卡3卡四 | 艹b小说| 亚洲 欧美 日韩 综合 | 99久久国产亚洲综合精品 | 国产精品亚欧美一区二区三区 | 99热网址 | 日本视频观看 | 大陆性出航 | 国产欧美va欧美va香蕉在线观 | 99视频九九精品视频在线观看 | 成人小视频在线免费观看 | av在线色| 精品免费视在线观看 | 精品国产一二三区在线影院 | 果冻传媒天美传媒网址入口 | 俄罗斯精品bbw | 精品视频在线免费观看 | 国产情侣视频观看 | 欧美日韩va | 兽皇videos日本另类 | 国产酒店自拍 | 国产高清在线播放免费观看 | 91探花在线播放 | 免费国产一级观看完整版 | 国产亚洲精品久久yy5099 | 日韩一区视频在线 | 国产精品www视频免费看 | 2012在线观看免费视频大全 | 欧美日韩综合一区 | 高人先生免费观看全集 |