在调用instanceof之前是否需要空值检查?
将null instanceof SomeClass
返回false
或抛出一个NullPointerException
?
不,在使用instanceof之前不需要空的检查。
如果x
为null
则表达式x instanceof SomeClass
为false
。
从Java语言规范的第15.2.2节“类型比较运算符instanceof”中:
“在运行时,结果instanceof
运算符是true
,如果RelationalExpression的值不null
,并引用可以转换为引用类型不提高一个ClassCastException
。否则,结果是false
。”
所以如果操作数为空,结果是错误的。
使用空引用作为instanceof
的第一个操作数返回false
。
确实很好的问题。 我只是为自己而努力。
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));
}
}
打印
true
true
false
false
JLS / 15.20.2。 类型比较运算符instanceof
在运行时,如果RelationalExpression的值不为null
,并且引用可以转换为ReferenceType而不引发ClassCastException
,则instanceof
运算符的结果为true
。 否则结果是false
。
API /类#isInstance(对象)
如果此Class
对象表示一个接口,则此方法在指定Object
参数的类或任何超类实现此接口时返回true
; 否则返回false
。 如果此Class
对象表示一个基本类型,则此方法返回false
。