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

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

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

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

相关推荐
m0_4805026428 分钟前
Rust 登堂 之 Cell 和 RefCell(十二)
开发语言·后端·rust
LunarCod31 分钟前
Onvif设备端项目框架介绍
后端·嵌入式·c/c++·wsdl·rv1126·onvif
羊锦磊1 小时前
[ Spring 框架 ] 数据访问和事务管理
java·后端·spring
未来coding2 小时前
Spring Boot SSE 流式输出,智能体的实时响应
java·spring boot·后端
whltaoin2 小时前
Spring Boot自定义全局异常处理:从痛点到优雅实现
java·spring boot·后端
7hyya2 小时前
如何将Spring Boot 2接口改造为MCP服务,供大模型调用!
人工智能·spring boot·后端
做运维的阿瑞2 小时前
告别性能焦虑:Python 性能革命实践指南
开发语言·后端·python
元气满满的霄霄2 小时前
Spring Boot整合缓存——Ehcache缓存!超详细!
java·spring boot·后端·缓存·intellij-idea
唐叔在学习2 小时前
文档转换神器pypandoc详解:解锁Python跨格式文档转换的终极姿势
后端·python
拂晓银砾3 小时前
数据库字段多类型Json值处理
java·后端