SomeClass的null实例是否返回false或引发NullPointerException?
当前回答
这个问题确实很好。我只是试着自己。
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/1520.2。类型比较运算符实例
在运行时,如果RelationalExpression的值不为null,则instanceof运算符的结果为true,并且引用可以在不引发ClassCastException的情况下强制转换为ReferenceType。否则,结果为假。
API/Class#isInstance(对象)
如果此Class对象表示接口,则如果指定object参数的类或任何超类实现了此接口,则此方法返回true;否则返回false。如果此Class对象表示基元类型,则此方法返回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/1520.2。类型比较运算符实例
在运行时,如果RelationalExpression的值不为null,则instanceof运算符的结果为true,并且引用可以在不引发ClassCastException的情况下强制转换为ReferenceType。否则,结果为假。
API/Class#isInstance(对象)
如果此Class对象表示接口,则如果指定object参数的类或任何超类实现了此接口,则此方法返回true;否则返回false。如果此Class对象表示基元类型,则此方法返回false。
使用空引用作为instanceof的第一个操作数将返回false。
instanceof运算符不需要显式的null检查,因为如果操作数为null,它不会引发NullPointerException。
在运行时,如果关系表达式的值不为null,则instanceof运算符的结果为true,并且可以将引用转换为引用类型,而不会引发类转换异常。
如果操作数为空,instanceof运算符将返回false,因此不需要显式的空检查。
考虑以下示例,
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");
}
}
不,在使用instanceof之前不需要进行null检查。
如果x为空,SomeClass的表达式x instance为false。
Java 11语言规范在第15.20.2节“类型比较运算符instanceof”中简洁地表达了这一点。(在引入了instanceofpatternmatching之后,Java17就不那么简洁地表达了这一点。)
“在运行时如果RelationalExpression的值为不为null,引用可以为强制转换为ReferenceType而不引发ClassCastException。否则,结果为假。"
因此,如果操作数为空,则结果为假。
推荐文章
- 在maven中安装mvn到底做什么
- 不可变与不可修改的集合
- 如何在JSON中使用杰克逊更改字段名
- GSON -日期格式
- 如何从线程捕获异常
- 无法解析主机"<URL here>"没有与主机名关联的地址
- getActivity()在Fragment函数中返回null
- 如何在Java中打印二叉树图?
- String.format()在Java中格式化双重格式
- com.jcraft.jsch.JSchException: UnknownHostKey
- Java中的操作符重载
- 如何加速gwt编译器?
- 在Hibernate中重新连接分离对象的正确方法是什么?
- 应该……接住环内还是环外?
- 如何格式化Joda-Time DateTime仅为mm/dd/yyyy?