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判断就好了 



原文地址:https://www.cnblogs.com/LQBlog/p/9090647.html