为了账号安全,请及时绑定邮箱和手机立即绑定

在调用instanceof之前是否需要进行null检查?

在调用instanceof之前是否需要进行null检查?

慕姐8265434 2020-02-03 14:57:10
会null instanceof SomeClass返回false还是抛出NullPointerException?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

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


表达式x instanceof SomeClass为falseif xis null。


根据Java语言规范的第15.20.2节“类型比较运算符instanceof”:


“在运行时,instanceof运算符的结果 是,true如果RelationalExpression 的值不是null,并且引用可以强制转换为ReferenceType 而不会引发ClassCastException。否则,结果为false。”


因此,如果操作数为null,则结果为false。


查看完整回答
反对 回复 2020-02-03
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

使用null引用作为instanceof返回的第一个操作数false


查看完整回答
反对 回复 2020-02-03
?
互换的青春

TA贡献1797条经验 获得超6个赞

确实是一个很好的问题。我只是为自己而努力。


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.2.2。类型比较运算符instanceof


在运行时,instanceof运算符的结果是,true如果RelationalExpression的值不是null,并且引用可以强制转换为ReferenceType而不引发ClassCastException。否则结果为false。


API / Class#isInstance(Object)


如果此Class对象表示一个接口,true则如果指定Object参数的类或任何超类实现此接口,则此方法返回;否则,该方法返回。否则返回false。如果此Class对象表示原始类型,则此方法返回false。


查看完整回答
反对 回复 2020-02-03
  • 3 回答
  • 0 关注
  • 654 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信