在调用instanceof之前是否需要空值检查?

null instanceof SomeClass返回false或抛出一个NullPointerException


不,在使用instanceof之前不需要空的检查。

如果xnull则表达式x instanceof SomeClassfalse

从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

链接地址: http://www.djcxy.com/p/2139.html

上一篇: Is null check needed before calling instanceof?

下一篇: How to determine if variable is 'undefined' or 'null'?