我讀jls §5.1.7和它說,有9種拳術,第九一個是拳擊From the null type to the null type
允許裝箱的空值,那麼爲什麼拆箱不被允許?
然後我讀到的null
Unboxing Conversion拋出一個NullPointerException
。好的,這很明顯。 隨後的null
拳擊爲什麼不拋出一個NullPointerException
,什麼是使用拳null
價值?
我讀jls §5.1.7和它說,有9種拳術,第九一個是拳擊From the null type to the null type
允許裝箱的空值,那麼爲什麼拆箱不被允許?
然後我讀到的null
Unboxing Conversion拋出一個NullPointerException
。好的,這很明顯。 隨後的null
拳擊爲什麼不拋出一個NullPointerException
,什麼是使用拳null
價值?
轉換null
爲整數不會拋出NullPointerException
因爲null
爲任何引用一個有效的值,例如: Integer intObject = null; // fine
但是,你不能做到這一點:
int intPrimitive = intObject; // not fine
因爲當你嘗試將Integer
轉換爲int
Integer.intValue()
在幕後調用,但調用任何方法空引用拋出NPE:
Object whatever = null;
whatever.anyMethod(); // always throws NPE
由於參考點null
,所選擇的類型的不是一個實際的對象。
沒有答案。我的問題是「拳擊」和「拆箱」不引用類型可以有'空值'和原始不能,我知道這也有一個答案http://stackoverflow.com/questions/19511616/why-java-does-未允許無效而-宣佈,原始數據類型 – Vishrant
我想您所提供的文檔給出答案。 「這條規則是必要的,因爲條件運算符對其操作數的類型應用了裝箱轉換,並將結果用於進一步的計算。」
如果的?:
秒和第三個操作數之一不是布爾或數值表達式,那麼可以使用拳。例如,true?1:2
類型是int
,而true?null:1
類型是Integer
。在第二個例子中,使用了自動裝箱。並且在運行時,第二個示例的類型將爲null類型,因爲在裝箱時將獲得null類型。
你怎麼能有一個原始的null? –
我認爲它不是原始的null,我們可以將null類型的boxing設置爲null類型,就像jls所說的那樣。我的問題是什麼是使用拳擊null,爲什麼它不會拋出NPE。 – Vishrant
答案是你給'這條規則是必要的,因爲條件運算符(§15.25)適用裝箱轉換的各類操作數的鏈接,並使用該結果進一步calculations.' –