java陷阱之自动拆箱
项目中突然报空指针异常
Integer code=null; code=code==null?500:code;
排查发现三元运算符空指针异常,表面上看不出来有什么问题,编译器编译的时候会保证:2边数据类型一致如:
String code=true?"":0;
会编译不通过。因为String 和int不是一个类型
按照上面的逻辑Integer是class类型并不是数值类型 编译器应该编译不通过。其实编译之后编译器后的代码是:
ccode=code==null?500:code.initValue();
所以这段代码才会编译通过。但是当code是null 调用initValue就会报空指针异常
同理以下代码也会报空指针异常
Integer code=null; int i=code;
--编译之后代码
int i=code.initValue()
这一切的原因都是编译器自动拆箱造成的。如下情况 价格是否为null判断就好了