1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基本类型为空导致线上空指针异常问题 java.lang.NullPointerException: cannot unbox null value

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

时间:2023-06-15 05:14:43

相关推荐

基本类型为空导致线上空指针异常问题 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。

如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。