问题描述:
在开始讲述之前我们先来看一段代码
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;