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

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

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

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

相关推荐
简创AIGC陶先生4 小时前
【剪映小助手源码精讲】09_音频素材管理系统
后端
will_we4 小时前
Spring Boot4正式篇:第二篇 多版本API特性
java·后端
v***5655 小时前
Spring Cloud Gateway
android·前端·后端
e***95645 小时前
springboot项目架构
spring boot·后端·架构
q***21605 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
j***12155 小时前
Spring Boot与MyBatis
spring boot·后端·mybatis
optimistic_chen5 小时前
【Java EE进阶 --- SpringBoot】Spring事务传播机制
spring boot·后端·spring·java-ee·事务·事务传播机制
l***74946 小时前
SQL Server2022版+SSMS安装教程(保姆级)
后端·python·flask
昵称为空C7 小时前
kafka的替代品redpanda部署与SpringBoot集成使用案例
spring boot·后端·kafka
q***09808 小时前
Spring Boot 2.7.x 至 2.7.18 及更旧的版本,漏洞说明
java·spring boot·后端