null instanceof SomeClass返回false还是抛出NullPointerException ?
#1楼
确实,这是一个很好的问题。 我只是为自己而努力。 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
#2楼
instanceof运算符不需要显式的null检查,因为如果操作数为null ,则它不会引发NullPointerException 。
在运行时,如果关系表达式的值不为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");
}
}
#3楼
使用null引用作为instanceof的第一个操作数将返回false 。
#4楼
不,这不对。 如果instanceof的第一个操作数为null则将返回false 。
#5楼
不,使用instanceof之前不需要进行空检查。
如果x为null则表达式x instanceof SomeClass为false 。
因此,如果操作数为null,则结果为false。