SomeClass的null实例是否返回false或引发NullPointerException?
当前回答
不,在使用instanceof之前不需要进行null检查。
如果x为空,SomeClass的表达式x instance为false。
Java 11语言规范在第15.20.2节“类型比较运算符instanceof”中简洁地表达了这一点。(在引入了instanceofpatternmatching之后,Java17就不那么简洁地表达了这一点。)
“在运行时如果RelationalExpression的值为不为null,引用可以为强制转换为ReferenceType而不引发ClassCastException。否则,结果为假。"
因此,如果操作数为空,则结果为假。
其他回答
作为一个小插曲:
偶数(((A)null)instanceof A)将返回false。
(如果类型转换为null似乎令人惊讶,有时您必须这样做,例如在以下情况下:
public class Test
{
public static void test(A a)
{
System.out.println("a instanceof A: " + (a instanceof A));
}
public static void test(B b) {
// Overloaded version. Would cause reference ambiguity (compile error)
// if Test.test(null) was called without casting.
// So you need to call Test.test((A)null) or Test.test((B)null).
}
}
因此Test.Test((A)null)将打印A:false的实例。)
备注:如果你正在招聘,请不要将此作为求职面试问题D
不,在使用instanceof之前不需要进行null检查。
如果x为空,SomeClass的表达式x instance为false。
Java 11语言规范在第15.20.2节“类型比较运算符instanceof”中简洁地表达了这一点。(在引入了instanceofpatternmatching之后,Java17就不那么简洁地表达了这一点。)
“在运行时如果RelationalExpression的值为不为null,引用可以为强制转换为ReferenceType而不引发ClassCastException。否则,结果为假。"
因此,如果操作数为空,则结果为假。
不,不是。如果第一个操作数为空,instanceof将返回false。
instanceof之前不需要null检查在instanceof验证为true后,不需要进行null检查
以下是空安全的:
if(couldbenull instanceof Comparable comp){
return comp.compareTo(somethingElse);
}
//java < 14
if(couldbenull instanceof Comparable){
return ((Comparable)couldbenull).compareTo(somethingElse);
}
使用空引用作为instanceof的第一个操作数将返回false。
推荐文章
- Intellij IDEA Java类在保存时不能自动编译
- 何时使用Mockito.verify()?
- 在maven中安装mvn到底做什么
- 不可变与不可修改的集合
- 如何在JSON中使用杰克逊更改字段名
- GSON -日期格式
- 如何从线程捕获异常
- 无法解析主机"<URL here>"没有与主机名关联的地址
- getActivity()在Fragment函数中返回null
- 如何在Java中打印二叉树图?
- String.format()在Java中格式化双重格式
- com.jcraft.jsch.JSchException: UnknownHostKey
- Java中的操作符重载
- 如何加速gwt编译器?
- 在Hibernate中重新连接分离对象的正确方法是什么?