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

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

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

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

相关推荐
用户21411832636028 小时前
Qwen3-Coder 实战!历史人物短视频一键生成,多分镜人物不崩,魔搭直接玩
后端
追逐时光者8 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net
追逐时光者8 小时前
C#/.NET/.NET Core编程技巧练习集,配套详细的文章教程讲解!
后端·.net
AD钙奶-lalala9 小时前
SpringBoot实现WebSocket服务端
spring boot·后端·websocket
moxiaoran57539 小时前
Flask学习笔记(一)
后端·python·flask
你的人类朋友9 小时前
🔒什么是HMAC
后端·安全·程序员
盖世英雄酱5813610 小时前
Read timed out问题 排查
java·数据库·后端
BXCQ_xuan10 小时前
软件工程实践二:Spring Boot 知识回顾
java·spring boot·后端
o0o_-_11 小时前
【go/gopls/mcp】官方gopls内置mcp server使用
开发语言·后端·golang
苏三说技术11 小时前
为什么不建议在 Docker 中跑 MySQL?
后端