JAVA三元運算符空指針引用的坑

有以下代碼:

Long x = null;
Long y = true ? x : 100L;
System.out.println(y);

很多人以爲會輸出:null,其實會報空指針異常

原因是編譯後包裝類型會拆箱: Long y = true ? x : 100L;  反編譯後變爲:Long y = true ? x.longValue() : 100.longValue();
x爲空對象,調用.longValue()自然會引用空指針異常

 

正確的代碼:

Long x = null;
Long y = true ? x : Long.valueOf(100);
System.out.println(y);

將基本類型100L 改爲 包裝類型Long.valueOf(100),這樣就不會發生拆箱,也就不會發生空指針引用。

希望大家使用三目運算符 且 兩邊類型不一致時,一定要引起注意!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章