记录一个Java三元表达式中的陷阱
今天遇到一个奇怪的Java三元表达式中的空指针异常。特此记录。
代码
代码示意如下:
Integer itemVO = null; Integer globleLatenessToleranceUseAlternate = null; Integer latenessToleranceUseAlternate = (itemVO == null ? globleLatenessToleranceUseAlternate : itemVO.intValue());
从上面代码可以看出:当itemVO不为空时,就取itemVO的值;否则,就取globleLatenessToleranceUseAlternate的值。
原因
但问题就在globleLatenessToleranceUseAlternate。当itemVO为空时,如果取globleLatenessToleranceUseAlternate,并不会得到值null, 而是Java会把globleLatenessToleranceUseAlternate进行一个自动开箱拆箱处理。简言之,取得是 globleLatenessToleranceUseAlternate.intValue(), 此时,因为globleLatenessToleranceUseAlternate 本身是 null,因此 globleLatenessToleranceUseAlternate.intValue() 导致了空指针因此。
解法
修改如下解决:
Integer itemVO = null; Integer globleLatenessToleranceUseAlternate = null; Integer latenessToleranceUseAlternate; if (itemVO != null) { latenessToleranceUseAlternate = itemVO.intValue(); } else { latenessToleranceUseAlternate = globleLatenessToleranceUseAlternate; }
值得注意的是,在新版的JDK和Eclipse中,会做出友好的提示,从而能够有效规避上述问题。提示如下:
Null pointer access: This expression of type Integer is null but requires auto-unboxing
参考引用

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
数据库的乐观锁和悲观锁并非真实的锁
开局 我们平时编写程序的时候,有很多情况下需要考虑线程安全问题,一个全局的变量如果有可能会被多个同时执行的线程去修改,那么对于这个变量的修改就需要有一种机制去保证值的正确性和一致性,这种机制普遍的做法就是加锁。其实也很好理解,和现实中一样,多个人同时修改一个东西,必须有一种机制来把多个人进行排队。计算机的世界中也是如此,多个线程乃至多个进程同时修改一个变量,必须要对这些线程或者进程进行排队。数据库的世界亦是如此,多个请求同时修改同一条数据记录,数据库必须需要一种机制去把多个请求来顺序化,或者理解为同一条数据记录同一时间只能被一个请求修改。 锁是数据库中最为重要的机制之一,无论平时写的select语句,还是update语句其实在数据库层面都和锁息息相关。如果没有锁机制,操作数据的时候可能会发生以下情况: 更新丢失:多个用户同时对一个数据资源进行更新,必定会产生被覆盖的数据,造成数据读写异常。 不可重复读:如果一个用户在一个事务中多次读取一条数据,而另外一个用户则同时更新啦这条数据,造成第一个用户多次读取数据不一致。 脏读:第一个事务读取第二个事务正在更新的数据表,如果第二个事务还没有更新...
- 下一篇
3D目标检测综述:从数据集到2D和3D方法
点击上方“计算机视觉cv”即可“进入公众号” 重磅干货第一时间送达 本文经机器之心(almosthuman2014)授权转载,禁止二次转载。作者:Yilin Wang, Jiayi Ye机器之心编译编辑:Panda 目标检测一直是计算机视觉领域中一大难题。近日,来自阿尔伯塔大学的研究者对目标检测领域的近期发展进行了综述,涵盖常见数据格式和数据集、2D 目标检测方法和 3D 目标检测方法。 论文地址:https://arxiv.org/abs/2010.15614 目标检测任务的目标是找到图像中的所有感兴趣区域,并确定这些区域的位置和类别。由于目标具有许多不同的外观、形状和姿态,再加上光线、遮挡和成像过程中其它因素的干扰,目标检测一直以来都是计算机视觉领域中一大挑战性难题。 本文将概述性地总结一些当前最佳的目标检测相关研究。第 2 节将简要介绍目标检测任务常用的数据格式,同时还会给出一些著名的数据集。 然后会概述一些预处理方法。第 3 节会介绍与 2D 目标检测相关的技术,包括传统方法和深度学习方法。最后第 4 节会概括性地讨论 3D 目标检测这一主题。 数据格式 数据集 在计算机图形学...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Hadoop3单机部署,实现最简伪集群
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7设置SWAP分区,小内存服务器的救世主