基本类型为空导致线上空指针异常问题 java.lang.NullPointerException: cannot unbox null value

线上钉钉群突然报空指针异常,结合日志分析代码,如下:

报错信息:(含入参)

reQueryDto={\"minAge\":null,\"maxAge\":26,\"startBirthYear\":null,\"endBirthYear\":1995}
java.lang.NullPointerException: null
\n\tat com.**.buildSearchQueryDto(RSearchListHandle.java:156) 

源码:代码是想通过endBirth和startBirth是否为null赋一个布尔值或者null。

// 年龄
Integer startBirth = reQueryDto.getMinAge() != null ? reQueryDto.getStartBirthYear() : null;
Integer endBirth = reQueryDto.getMaxAge() != null ? reQueryDto.getEndBirthYear() : null;
if (startBirth != null || endBirth != null) {
	query.setBirthYear(
        new IntRangeParam(endBirth, 
                          endBirth != null ? Boolean.TRUE : null, 
                          startBirth,
                           startBirth != null ? Boolean.TRUE : null));
}

带入参数分析:

minAge = null ; maxAge = 26; 推导出startBirth = null; endBirth = 1995; 满足if条件 endBirth != null

进入if内部逻辑。粗看创建IntRangeParam的逻辑没有问题,为什么就会报空指针呢?

分析:IntRangeParan的第二个参数和第四个参数是布尔值,如果条件不满足,为false时,就会赋一个空值,导致一个空指针异常。那么我们看看IntRangeParam类中的这两个参数类型:includeFrom 和 includeTo居然是基本类型,那肯定会报错了。

这里涉及到,基本类型没有空值,只有false和true,不像包装类型似的,可以有空值。因为调用时,没有仔细观察内部实现导致错误。

总结:当包装类型拆箱赋给基本类型变量时,一定要注意包装类型是否会为空值,如果是空值,会报错,java.lang.NullPointerException: cannot unbox null value。因为基本类型不允许为null。 

如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值