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

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

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

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

相关推荐
lang2015092829 分钟前
Spring Boot构建RESTful服务与Actuator监控
spring boot·后端·restful
向上的车轮1 小时前
无需云服务的家庭相册:OpenHarmony 上的 Rust 实践
开发语言·后端·rust
程序猿小蒜3 小时前
基于springboot的车辆管理系统设计与实现
java·数据库·spring boot·后端·spring·oracle
90后的晨仔4 小时前
Java后端开发:从零构建企业级应用的完整架构与技术栈详解
后端
我命由我123454 小时前
Spring Cloud - Spring Cloud 声明式接口调用(Fiegn 声明式接口调用概述、Fiegn 使用)
java·后端·spring·spring cloud·微服务·架构·java-ee
canonical_entropy4 小时前
领域驱动设计(DDD)中聚合根的最主要职责真的是维护一致性吗?
后端·架构·领域驱动设计
AntBlack5 小时前
不当韭菜 : 好像真有点效果 ,想藏起来自己用了
前端·后端·python
橙子家5 小时前
Serilog 日志库的简介
后端
间彧5 小时前
Java线程池深度实战:不同场景下的最优选择与性能优化
后端
间彧5 小时前
CompletableFuture与线程池:并发编程的双剑合璧
后端