有以下代碼:
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),這樣就不會發生拆箱,也就不會發生空指針引用。
希望大家使用三目運算符 且 兩邊類型不一致時,一定要引起注意!!!