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

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

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

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

相关推荐
毕设源码-朱学姐18 小时前
【开题答辩全过程】以 基于SpringBoot+Vue的百货商品进出货平台为例,包含答辩的问题和答案
java·spring boot·后端
码路飞18 小时前
Claude Code 大规模封号,我花了一晚上才搞明白:setup token 和 API key 根本不是一回事
后端·claude
Cache技术分享18 小时前
359. Java IO API - 路径比较与处理
前端·后端
Leo89918 小时前
go从零单排之defer源码
后端
Java水解18 小时前
SQL 核心概念:JOIN 和 UNION 到底有什么区别?
后端·sql
夜空下的星18 小时前
springboot实现Minio大文件分片下载
java·spring boot·后端
lizhongxuan18 小时前
Claude Mem:为什么长上下文不等于好记忆
后端
y = xⁿ19 小时前
重生之我创作出了小红书:对象存储模块,用户资料模块
后端·mysql·intellij-idea
404避难所19 小时前
windows安装WSL2
后端
轩情吖19 小时前
MySQL之用户管理
数据库·c++·后端·mysql·权限管理·用户管理