Integer(null) 拆箱后与 int(0) 比较报空指针异常

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值会自动转换吗?

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值