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

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

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

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

相关推荐
搬砖小匠4 分钟前
SpringBoot 通过自定义注解 + AOP 实现数据字典自动翻译(通用方案)
java·后端
生信星球8 分钟前
空间转录组常规分析(大白话教程)
后端
izhaorui37 分钟前
【无标题】
后端
长栎37 分钟前
AI 写的接口能用,但永远差点意思——这不是 prompt 的问题,是接口设计的品控规则它没装
后端
小p39 分钟前
nextjs学习9: Next.js 渲染与缓存
前端·后端
宋哥转AI1 小时前
深入理解 AI Agent 03|RAG评估体系:量化检索增强效果,精准定位系统短板
人工智能·后端·agent
Leo2821 小时前
数据库Executor-Selector排查实践
后端
Zane19941 小时前
线程池入门:7 大核心参数与 4 种拒绝策略
java·后端
用户298698530141 小时前
无需安装 Excel,也能轻松将 CSV 转为 XLS 或 XLSX
后端·c#·excel
Gopher_HBo1 小时前
Gin架构总览
后端