null instanceof SomeClass
返回false
仍是拋出NullPointerException
? html
確實,這是一個很好的問題。 我只是爲本身而努力。 java
public class IsInstanceOfTest { public static void main(final String[] args) { String s; s = ""; System.out.println((s instanceof String)); System.out.println(String.class.isInstance(s)); s = null; System.out.println((s instanceof String)); System.out.println(String.class.isInstance(s)); } }
版畫 api
true true false false
JLS / 15.2.2。 類型比較運算符instanceof oracle
在運行時,若是RelationalExpression的值不爲
null
而且能夠將引用強制轉換爲ReferenceType而不引起ClassCastException
,則instanceof
運算符的結果爲true
。 不然結果爲false
。 ide
API / Class#isInstance(Object) spa
若是此
Class
對象表示一個接口,則若是指定Object
參數的類或任何超類實現此接口,則此方法返回true
不然,此方法返回true
。 不然返回false
。 若是此Class
對象表示原始類型,則此方法返回false
。 code
instanceof
運算符不須要顯式的null
檢查,由於若是操做數爲null
,則它不會引起NullPointerException
。 htm
在運行時,若是關係表達式的值不爲null
,而且引用能夠強制轉換爲引用類型而不會引起類強制轉換異常,則instanceof
運算符的結果爲true。 對象
若是操做數爲null
,則instanceof
運算符將返回false
,所以不須要顯式的null檢查。 接口
考慮下面的示例,
public static void main(String[] args) { if(lista != null && lista instanceof ArrayList) { //Violation System.out.println("In if block"); } else { System.out.println("In else block"); } }
正確使用instanceof
以下所示,
public static void main(String[] args) { if(lista instanceof ArrayList){ //Correct way System.out.println("In if block"); } else { System.out.println("In else block"); } }
使用null引用做爲instanceof
的第一個操做數將返回false
。
不,這不對。 若是instanceof
的第一個操做數爲null
則將返回false
。
不,使用instanceof以前不須要進行空檢查。
若是x
爲null
則表達式x instanceof SomeClass
爲false
。
根據Java語言規範的第15.20.2節「類型比較運算符instanceof」 :
「在運行時,結果
instanceof
運算符是true
,若是RelationalExpression的值不null
,並引用能夠轉換爲引用類型不提升一個ClassCastException
。不然,結果是false
。」
所以,若是操做數爲null,則結果爲false。