自动拆箱 导致的空指针问题复盘

自动拆箱 导致的空指针问题复盘

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)的时候不会报错

这个点简单,但是底层设计到的装箱和拆箱的原理还是得了解下的,便于分析。

相关推荐
颜淡慕潇1 天前
深度解析官方 Spring Boot 稳定版本及 JDK 配套策略
java·后端·架构
Victor3561 天前
Hibernate(28)Hibernate的级联操作是什么?
后端
Victor3561 天前
Hibernate(27)Hibernate的查询策略是什么?
后端
superman超哥1 天前
Rust 内部可变性模式:突破借用规则的受控机制
开发语言·后端·rust·rust内部可变性·借用规则·受控机制
柒.梧.1 天前
Spring核心知识全解析:从入门实战到进阶
java·后端·spring
乌日尼乐1 天前
【Java基础整理】Java字符串处理,String、StringBuffer、StringBuilder
java·后端
qwepoilkjasd1 天前
DMC发送M-SEARCH请求,DMR响应流程
后端
心在飞扬1 天前
langchain学习总结:Python + OpenAI 原生 SDK 实现记忆功能
后端
张志鹏PHP全栈1 天前
Solidity智能合约快速入门
后端
ihgry1 天前
SpringCloud_Nacos
后端