探究 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);
欢迎大佬们交流学习和讨论