https://stackoverflow.com/questions/2950319/is-null-check-needed-before-calling-instanceof
【问题】
在调用instanceof
之前是否要检查它为null
【描述】
如果调用null instanceof SomeClass
是返回 false 还是返回NullPointerException
【回答1】
不,在调用instanceof
之前不用检查是否为空
表达式x instanceof SomeClass
在x
为空时返回false
来自Java规范 section 15.20.2, “Type comparison operator instanceof”
“在运行时,如果relationalExpression的值不为空,并且引用可以强制转换为referenceType而不引发ClassCastException,则instanceOf运算符的结果为true。否则结果是错误的。”
所以,如果操作对象为空时,返回false
.
【回答2】
事实上这是一个很好的问题,我做了些尝试
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
section 15.20.2, “Type comparison operator instanceof”
“在运行时,如果relationalExpression的值不为空,并且引用可以强制转换为referenceType而不引发ClassCastException,则instanceOf运算符的结果为true。否则结果是错误的。”
API / Class#isInstance(Object)
如果这个类对象表示一个接口,那么如果指定对象参数的类或任何超类实现了这个接口,这个方法将返回true;否则返回false。如果该类对象表示基元类型,则此方法返回false。