java 探究 null == 1 为什么空指针

本文探讨了Java中将null的Integer对象与整型基础类型1进行比较时出现空指针异常的原因。代码示例展示了当尝试调用Integer.intValue()时,如果Integer对象为null,会抛出NullPointerException。解决方法是在比较前进行null检查或显式转换。文章强调了包装类型与基础类型比较时需注意的装箱拆箱规则,以及避免空指针异常的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

探究 null == 1 为什么空指针

上代码

    public static void main(String[] args) {
        Integer i = null;
        System.out.println(i == 1);
    }

字节码如下:

 0 aconst_null
 1 astore_1
 2 getstatic #2 <java/lang/System.out : Ljava/io/PrintStream;>
 5 aload_1
 6 invokevirtual #3 <java/lang/Integer.intValue : ()I>
 9 iconst_1
10 if_icmpne 17 (+7)
13 iconst_1
14 goto 18 (+4)
17 iconst_0
18 invokevirtual #4 <java/io/PrintStream.println : (Z)V>
21 return

第6行 调用了 Integer.intValue,因为i是null,就相当于这段代码

null.intValue()

当然空指针了

探究原因,包装类型不能和基础类型直接比较,需要装箱或者拆箱,这时可能就会有空指针。
如果这样写就没有问题

 Integer i = null;
 System.out.println(i == (Integer)1);

欢迎大佬们交流学习和讨论

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值