爲什麼此代碼會引發編譯錯誤?爲什麼我不能使用「instanceof」作爲Int和Integer的比較數組?
Integer[] arr = new Integer[3];
if (arr instanceof Integer) {
System.out.println("true");
}
ARR是一個對象,並在同一時間整數是一個對象。爲什麼我無法將它們與instanceof
進行比較?
爲什麼此代碼會引發編譯錯誤?爲什麼我不能使用「instanceof」作爲Int和Integer的比較數組?
Integer[] arr = new Integer[3];
if (arr instanceof Integer) {
System.out.println("true");
}
ARR是一個對象,並在同一時間整數是一個對象。爲什麼我無法將它們與instanceof
進行比較?
JLS 15.20.2。鍵入比較運算符
instanceof
如果RelationalExpression到引用類型鑄造(§15.16)將被拒絕作爲一個編譯時間錯誤,那麼
instanceof
關係式同樣產生一個編譯時間錯誤。
凡使用instanceof
是
if (RelationalExpression instanceof ReferenceType)
由於Integer
和Integer[]
之間的類型轉換失敗,因爲無論是其他的亞型(他們共同的超類型是Object
),instanceof
給人一種併發症錯誤
不兼容的條件操作數類型Integer []和Integer。
Integer[]
與Integer
不一樣。他們是兩個完全不同的類:你可以通過檢查Integer[].class == Integer.class
來看到這一點,這將產生false
。
這應該不會令人驚訝:一個是數組類型,另一個不是。您可以在Integer
上調用Integer.intValue()
,在Integer[]
上調用Integer[].length
,但不調用Integer.length
或Integer[].intValue()
。
此外,這兩個類別中唯一的共同超類型是Object
,所以Integer
參考無法存儲Integer[]
,反之亦然。
非常感謝您的回答。我知道,Integer []與Integer並不相同。但我誤解了「instanceof」的工作原理。現在對我來說很清楚! – agurylev
非常感謝!正是我想知道的! – agurylev