自动拆箱 导致的空指针问题复盘
Java
// 实际业务场景:函数式接口调用entity实体
// 运行报错:java.lang.NullPointerException,怎么分析
int i = (Integer) function.apply(entity);
System.out.println(i);
抽象成问题
Java
Object o = null;
//报错 java.lang.NullPointerException
int i = (Integer) o;
System.out.println(i);
为什么呢?进一步验证
java
Object o = null;
Integer i = (Integer) o;
// 输出 null
System.out.println(i);
其实实际上是因为自动拆箱导致的报错
java
Integer i = null;
int num = i; // 自动拆箱,等价于 i.intValue(),i为null直接就报错了。
思考:那么自动装箱会不会有问题呢?
java
int num = 10;
Integer wrapper = num; // 自动装箱,等价于 Integer.valueOf(num)
因为基本数据类型的值不可能为null,所以调用静态方法Integer.valueOf(num)的时候不会报错
这个点简单,但是底层设计到的装箱和拆箱的原理还是得了解下的,便于分析。