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

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

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

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

相关推荐
用户60572374873082 分钟前
AI 编码助手的规范驱动开发 - OpenSpec 初探
前端·后端·程序员
哈密瓜的眉毛美7 分钟前
零基础学Java|第二篇:Java 核心机制与第一个程序:从 JVM 到 Hello World
后端
用户83071968408222 分钟前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者23 分钟前
RocketMQ 集群介绍
后端·消息队列·rocketmq
Leo89928 分钟前
go 从零单排 之 一小时通关
后端
花花无缺29 分钟前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
CodeMonkey29 分钟前
记一次傻逼一样的 OOM 异常
后端
初次攀爬者31 分钟前
RocketMQ 基础学习
后端·消息队列·rocketmq
重庆穿山甲44 分钟前
Java开发者的大模型入门:LangChain4j组件全攻略(二)
后端
重庆穿山甲1 小时前
Java开发者的大模型入门:LangChain4j组件全攻略(一)
后端