Integer(null)拆箱后与int比较报空指针异常
首先代码是这样的:
Integer i = 0;
Integer Obj = null;
if(0 == Obj || null == Obj ){...}
这样,当Obj 值为null 时,那个if语句会报错,为什么呢?
当 Obj 为null时,证明 Obj是没有值,是未赋值状态;
而 i 是有值,只是它的值是 0 。
在Obj 取值的时候是null值,可是按说明来说基本类型和包装类型都是可以通过自动拆箱和自动装箱自由转换的,为什么null值没有被转换为0么?
源码:
所以当 判断 0 == obj,会报空指针异常。所以在获取到值有可能为空要装箱的时候,一定要加上null值的校验,将代码写成如下的格式就不会有错误了。
int res = (Obj == null ? 0 : obj)
或者代码最上面的代码改为:
Integer i = 0;
Integer Obj = null;
if( null == Obj || 0 == Obj ){...}
感谢浏览~~~
参考:
Java-Integer与Int类型的比较-装箱与拆箱详解
int 和 Integer
包装类型拆箱的时候null值会自动转换吗?