场景
- JDK 8/21
- 业务使用三元表达式,获取结果抛出空指针
1 | public static void main(String[] args) { |
异常
1 | Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "com.test.service.NullPointService.getTarget()" is null |
原因
- JDK 底层会进行拆装箱,当null 进行 int转化,则会有空指针异常,所有包装类都会触发。
- 详细参考
处理
显示判定
1
2
3
4
5if (Objects.nonNull(source)) {
if (Objects.isNull(target)) {
log.error("target is null");
}
}指定类型, 避免触发分支预测时的拆装箱情况
1
2
3Integer result = Objects.nonNull(source) ? Optional.ofNullable(target).orElse(null) : Integer.valueOf(2);
log.info("source:{}, target:{} , result:{}", source, target, result);
代码记录
Code: https://github.com/swzxsyh/Case
Rivision Num: 9e5a514b6f9e57ed18c0989c9f05e22f3bb7b59a