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

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

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

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

相关推荐
用户8356290780517 小时前
使用 Python 合并 PowerPoint 演示文稿
后端·python
掘金者阿豪7 小时前
数据同步软件技术实践:从异构数据库迁移到实时数据流转,解析电科金仓KFS架构设计
后端
ServBay7 小时前
不会写代码,如何搭建自己的 AI 自动化工作流
后端·aigc·ai编程
天远大数据8 小时前
从调用账单到业务回执:Agent单位成本核算实践
人工智能·后端
沐言人生8 小时前
又一个神级考公脑库-22,375篇真题终于按考点整理了
后端·面试
xn71338 小时前
EmbeddingGemma 2 270M 实测:278 Chunk、32 个查询与 RRF 反例
人工智能·后端·架构
丨只要微微辣8 小时前
从前端到后端:第一次把项目部署 上云的完整实战(含踩坑实录)
后端
newerp8 小时前
Execution Trace 深入实战:可视化调度与系统停顿分析
后端·程序员·go
Lambert2818 小时前
SAA 停摆的答案:前团队的 ARGI 我上手跑了一遍,缝了三针才跑通
后端·openai·ai编程
轻舟技术A8 小时前
Pi 的 Rust 实现来了:rpi,不止一个终端 Agent
开发语言·后端·rust