深入剖析Java中的装箱和拆箱:
关键的话:
- 当 "=="运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。
- Integer拆箱调用的是其intValue方法
请看以下代码:
Integer a = null;
System.out.println(1 == a);//java.lang.NullPointerException
System.out.println(a == 1);//java.lang.NullPointerException
为什么报空指针?
因为1是基本类型,a为包装类,判等的时候会进行拆箱操作,null在拆箱的时候会空指针。
所以在用包装类运算或比较时,要先判断是否为null再进行比较:(a!=null && a==1)