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

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

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 分钟前
位运算技巧总结
后端·算法·性能优化
狗头大军之江苏分军22 分钟前
频繁跳槽和稳定工作有什么区别?真的比稳定工作的人差吗?
前端·后端
m0_4805026426 分钟前
Rust 入门 注释和文档之 cargo doc (二十三)
开发语言·后端·rust
Sheeep35 分钟前
Cursor 的使用之学会使用 cursor rule
javascript·后端
灰原喜欢柯南36 分钟前
Spring Boot 自动配置全流程深度解析
java·spring boot·后端
Code_Artist40 分钟前
[Java并发编程]4.阻塞队列
java·数据结构·后端
CryptoRzz41 分钟前
使用Java对接印度股票市场API开发指南
前端·后端
码间舞41 分钟前
道路千万条,安全第一条!要对付XSS等攻击你有什么手段?你知道什么是CSP吗?
前端·后端·安全
ikun1 小时前
xwiki livedata筛选和分页
后端