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

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

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

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

相关推荐
江畔柳前堤5 小时前
GO01-Go 语言与主流编程语言深度对比
开发语言·人工智能·后端·微服务·云原生·golang·go
世界哪有真情6 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
Csvn8 小时前
Day 3:LIKE 与模式匹配 — 让查询学会"模糊搜索"
后端·sql
Hazenix9 小时前
Go 指南:一篇文章速通 Golang
开发语言·后端·golang
灯澜忆梦9 小时前
GO_复合类型---指针
开发语言·后端·golang
IT_陈寒9 小时前
SpringBoot自动装配坑了我一天,原来问题出在这
前端·人工智能·后端
星栈10 小时前
深度复盘:比 EventLoop 更隐蔽!Node 微任务堆积引发的线上接口雪崩事故
后端·node.js
名字还没想好☜10 小时前
Go slice 的 append 陷阱:共享底层数组导致的数据串改
开发语言·后端·golang·go·slice
诸神缄默不语10 小时前
FastAPI后端配置CORS中间件支持浏览器跨域访问
后端·fastapi
Fanta丶10 小时前
14.Activiti7 网关 排他网关ExclusiveGateway、并行网关ParallelGateway
后端