java自动拆箱产生的空指针

问题描述:

在开始讲述之前我们先来看一段代码

boolean b = false;
Integer num = null;
Integer result = b ? 0 : num;

一个很简单的三目表达式,看似没什么问题,但是运行后却报错

Exception in thread "main" java.lang.NullPointerException
	at com.liutf.demo.demoTest.DemoTest.main(DemoTest.java:22)

问题分析:

这是自动装箱/拆箱的特性,只要一个运算中有不同的类型,涉及到类型转换,那么编译器会往下(基本类型)转型,再进行运算。 就是说,如果运算中有int和Integer,Integer会先转成int再计算。

Integer与int类型的装箱和拆箱,分别是通过Integer.valueOf()和Integer.intValue()实现的。

问题解决:

知道了原因,问题就很好解决了,只要再对包装类型进行一下判空就可以了

举一反三:

下面的代码会如何执行

//1
Integer num = null;
int i = num;


 //2
Integer num = null;
boolean b = 10 == num;


//3
Integer num = null;
int i = 10 + num;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值