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值会自动转换吗?
本文探讨了Java中Integer对象与int基本类型进行比较时可能遇到的问题,特别是当Integer对象为null时会发生空指针异常的情况。文章给出了两种避免此类异常的方法,并强调了在进行类型转换时对null值进行检查的重要性。

被折叠的 条评论
为什么被折叠?



