第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將空對象轉(zhuǎn)換為整數(shù)

將空對象轉(zhuǎn)換為整數(shù)

慕雪6442864 2023-08-04 16:27:49
我試圖理解下面的代碼。第 2 行輸出null,而第 3 行拋出NullPointerException。我缺少什么?理論上它應(yīng)該有效。public static void main(String []args){  1  Object[] obj = {null};   2  System.out.println((Integer)obj[0]);  //Output null  3  Integer n = obj[0] == null ? (Integer)obj[0] : 1; //NullPointerException  4  System.out.println(n); }
查看完整描述

2 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗 獲得超2個贊

根據(jù)JLS中定義的規(guī)則,三元條件運算符的類型

null???(Integer)obj[0]?:?1;

int, 不是Integer.

因此,當(dāng)該表達(dá)式的結(jié)果為 時(Integer)obj[0],將Integer拆箱為int,得到NullPointerException

參見JLS 15.25。條件運算符 ??:,表 15.25-A。:

由于第二個操作數(shù)是Integer,第三個操作數(shù)是int,因此條件表達(dá)式類型是int。


查看完整回答
反對 回復(fù) 2023-08-04
?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗 獲得超4個贊

這里的關(guān)鍵概念是二進(jìn)制數(shù)字提升。

當(dāng)您為運算符提供不同類型的操作數(shù)時,必須將這些操作數(shù)轉(zhuǎn)換為彼此兼容。此轉(zhuǎn)換的條件運算符的規(guī)則相當(dāng)復(fù)雜;但當(dāng)操作數(shù)具有不同類型且可轉(zhuǎn)換為數(shù)字時,將應(yīng)用二進(jìn)制數(shù)字提升。

在提供一個裝箱操作數(shù)和一個原始操作數(shù)的情況下,二進(jìn)制數(shù)字提升的效果是嘗試對裝箱操作數(shù)進(jìn)行拆箱,而不是對原始操作數(shù)進(jìn)行裝箱。

您可以使用其他多操作數(shù)運算符觀察二進(jìn)制數(shù)字提升,例如+

System.out.println(1?+?(Integer)?null);?//?NullPointerException!

使用條件運算符,如果顯式對 1 進(jìn)行裝箱,則不會得到 NPE,因為操作數(shù)的類型不不同:

Integer?n?=?obj[0]?==?null???(Integer)obj[0]?:?Integer.valueOf(1);


查看完整回答
反對 回復(fù) 2023-08-04
  • 2 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號