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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲免费小视频 | 亚洲女bbwxxxx另类 | 国产手机在线αⅴ片无码观看 | 亚洲AV无码国产精品色午夜情 | 手机跑分排行最新排名 | 视频免费 | 国产欧美一区视频在线观看 | 青草视频免费观看在线观看 | 69日本人 | 乌克兰17一18处交 | 碰91精品国产91久久婷婷 | 白丝女仆被啪到深夜漫画 | 99视频全部看免费观 | 欧美另类xxx精品人妖 | 国产精品日韩在线观看 | 欧美人成绝费网站色www吃脚 | 欧美人禽杂交在线视频 | 日韩毛片大全免费高清 | 国产成人精品午夜在线播放 | 国产欧美va欧美va香蕉在线观看 | 色综合中文字幕在线亚洲 | 亚洲是图你懂的 | 99人中文字幕亚洲区 | 丝袜美女被艹 | 国自产拍在线天天更新91 | 日韩欧美在线视频一区二区 | 国产欧美日韩精品一区二区三区 | 男人扒开 | 236宅宅2021最新理论 | 小寡妇好紧进去了好大看视频 | 精精国产www视频在线观看免费 | 精品久久99麻豆蜜桃666 | 黄a级 | 国产精品久久现线拍久青草 | 欧美xbxbxbxb大片 | 亚洲区视频在线观看 | 成人国产精品 | h日本漫画全彩在线观看 | 精品久久久久亚洲 | 夫妻性生活一级黄色片 | 日产精品卡一卡2卡三卡乱码工厂 |