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

被折叠的 条评论
为什么被折叠?



