Java开发手册中为什么要求三目运算符必须要注意类型对齐

场景

java开发手册中对于三目运算符的使用要求如下:

【强制】三目运算符 condition? 表达式 1 : 表达式 2 中,高度注意表达式 1 和 2 在类型对齐时,

可能抛出因自动拆箱导致的 NPE 异常。

说明:以下两种场景会触发类型对齐的拆箱操作:

1) 表达式 1 或表达式 2 的值只要有一个是原始类型。

2) 表达式 1 或表达式 2 的值的类型不一致,会强制拆箱升级成表示范围更大的那个类型。

 

下面看一个反例:

        Integer a = 1;Integer b = 2;Integer c = null;Boolean flag = false;Integer result = (flag?a*b:c);

上面写法会触发NullPointException-a*b的结果是int类型,那么c会强制拆箱成Int类型,抛出异常。

注意:

对于条件表达式b?x:y,先计算条件 b,然后进行判断。如果 b 的值为 true,

计算 x 的值,运算结果为 x 的值;否则,计算 y 的值,运算结果为 y 的值。

 一个条件表达式从不会既计算 x,又计算 y。

条件运算符是右结合的,也就是说,从右向左分组计算。例如,a?b:c?d:e 将按 a?b:(c?d:e)执行。

根据规定,三目运算符的第二、第三位操作数的返回值类型应该是一样的,这样才能当把一个三目运算符的结果赋值给一个变量。

如:Person i = a>b : i1:i2; ,就要求 i1 和 i2 的类型都必须是 Person才行。因为 Java 中存在一种特殊的情况,

那就是基本数据类型和包装数据类型可以通过自动拆装箱的方式互相转换。即可以定义 int i = new Integer(10);也可以定义Integer i= 10;

那如果,三目运算符的第二位和第三位的操作数的类型分别是基本数据类型和包装类型对象时,就需要有一方需要进行自动拆装箱。

根据三目运算符的语法规范,当第二,第三位操作数分别为基本类型和对象时,其中的对象就会拆箱为基本类型进行操作。

下面再看一个反例

        boolean b1 = true;boolean b2 = false;Boolean nullBool = null;boolean result = b1 ? nullBool : b2;


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352658.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【统计分析】Bland-Altman图:MedCalc操作指南与Python实现

之前有记录过一致性分析中的天选之子ICC(传送),也提到过Bland-Altman图,Bland-Altman图在一致性分析中作为一种既定量又定性的方法,还有着高颜值的表达展现,受到了广泛地应用。   如下图所示,…

HTML截图

把网页存为一张长图: 操作方法: 1.打开编辑模式(按F12或在空白处右键,下拉菜单中点击“检查”。 2进入编辑模式后,再次快捷键: ctrlshiftp,出现输入框,键入: screenshot后回车,下载图片。

Linux Shell脚本攻略

一、echo命令 1、在echo中转义换行符 默认情况下,echo会在输出文本的尾部追加一个换行符。可以使用选项-n来禁止这种行为。 echo同样接受双包含转义序列的双引号字符串作为参数。在使用转义序列时,需要使用echo -e "包含转义序列的字符串"这…

银行业务相关

省联社,农商行、农村信用社之间的关系 一些知乎回答 省联社、农商行、农村信用社之间有什么联系? - mobye的回答 - 知乎 https://www.zhihu.com/question/24220844/answer/28276903 发源于空想社会主义,世界上第一个信用合作社诞生于1984年的…

转动的车轮-第14届蓝桥杯国赛Scratch真题初中级组第2题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第144讲。 转动的车轮,本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第2题…

2023下半年软考中级考试科目-2023年11月软考中级科目难度排行

软考中级资格考试科目分为基础知识和应用技术,基础知识在上午考试,应用技术在下午考试,两个科目的考试题型也有所不同。 基础知识考试题型为客观选择题,共计75道选择题,每小题1分;应用技术为主观问答题&am…

实战-基于Jenkins+K8s构建DevOps平台(九)

实验步骤如下: 第一部分:安装持久化存储nfs 1、在k8s-master和k8s-node1上安装nfs服务 [rootk8s-master ~]# yum install nfs-utils -y [rootk8s-master ~]# systemctl start nfs [rootk8s-master ~]# systemctl enable nfs [rootk8s-node1 ~]# yum …

SQL-DML、DQL查询数据

SQL-DML、DQL查询数据 1 DML DML主要是对数据进行增(insert)删(delete)改(update)操作。 1.1 添加数据 给指定列添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);给全部列添加数据 INSERT…

员工激励:什么样的方法最合适?

经典畅销教材《人力资源管理必读12篇》曾探讨过一些不恰当的激励方式,那哪些激励方式实在又受人欢迎呢? 钱。 首先让我们回到“德普雷定理”的定义——“人们之所以需要工作,是因为希望得到自由发挥的机会。对于热爱工作的人来说&#xff0…

怎么搭建员工持股平台

转自:https://zhuanlan.zhihu.com/p/68564395 一、员工持股平台 概念 持股平台就是公司用来实施股权激励的一种操作模式,就是在母公司之外搭建一个有限合伙企业或者公司制的企业用来实现激励对象间接持有母公司股权的目的。 员工持股条件 在员工持股…

激励倍增法则:利用赞美激励员工 | 每天成就更大成功

激励倍增法则 激励倍增法则:美国管理学家彼得提出利用赞美激励员工,赞赏别人所付出的,要远远小于被赞赏者所得到的。 激励倍增法则的管理启示 员工从管理者的赞美中所得到的要远远大于管理者的付出。学会使用激励的杠杆,就会明白做…

员工激励的核心是人的满足感

http://cxo.cfw.cn/zhichang/v170463-1.htm 美国管理学家贝雷尔森(Berelson)和斯坦尼尔(Steiner)对激励的定义是:“一切内心要争取的条件、希望、愿望、动力都构成了对人的激励。——它是人类活动的一种内心状态”。在…

用Python构建大数据推荐系统:一个世界500强企业的成功案例

推荐系统是大数据时代的利器,它能够为企业提升用户体验、增加用户粘性、促进销售转化、提高营销效率等。但是,搭建一个成功的推荐系统并不容易,它需要综合考虑多方面的因素,并根据业务场景、用户需求、数据变化等不断地进行迭代和…

Windows 脚本批量打开文件

Windows 脚本批量打开文件 应用场景 对自己个人而言,每次学习某个内容,要打开一系列学习文档、代码和网页 可应用于执行某个任务需要一次性打开多个文件的场景。 方法 脚本内容 echo offstart "" "E:\Records\WebDesignLearning\la…

Vivado_除法器 IP核

本文介绍使用Vivado中除法器Divider Generator(5.1)的使用方法。 参考资料:pg151 文章目录 Divider Generator仿真测试 Divider Generator Channel Settings选项卡 #Common Options: Algorithm Type: 一共有三种类型,…

地震勘探基础(九)之地震速度分析

速度分析 在地震资料数字处理中,速度分析是动校正和水平叠加和地震偏移的基础。 在水平界面情况下,共中心点时距曲线方程是一条双曲线。在共中心点时距曲线中,炮检距 x x x 和时间 t 0 t_0 t0​ 都是已知的,只有速度 v v v 是…

C++算法:排序之二(归并、希尔、选择排序)

C算法:排序 排序之一(插入、冒泡、快速排序) 排序之二(归并、希尔、选择排序) 文章目录 C算法:排序二、比较排序算法实现4、归并排序5、希尔排序5、选择排序 原创文章,未经许可,严禁…

生活小技能

win10 屏幕亮度调节不了怎么办? 1、winr 输入:regedit ,打开注册表 2、HKEY_LOCAL_MACHINE 3、SYSTEM 4、ControlSet001 5、Control 6、Class 7、{4d36e968-e325-11ce-bfc1-08002be10318} 8、右侧栏目添加 KMD_EnableBrightnesslnterface2 …

剑灵服务器延迟时间在哪看,《剑灵怎么看延迟》,剑灵怎么显示ping

在【环境设置】→【游戏】→【界面】里面。功能 下面的第一个就是了 剑灵怎么显示ping 答:剑灵内置并没有设置显示ping一项。如果你想看的话,可以通过打开任务管理器——性能——(位于下方的)资源监视器——网络选项卡——TCP连接 中就有延迟一栏可以...…

剑灵服务器名修改,“名”动服务器!你想要的剑灵名字都在这

一款游戏能不能让人着迷,其实最主要的是你身边够不够多人在玩,如果身边的朋友都在玩剑灵,那么自己就一定也会被其所吸引,你在剑灵中用的是什么剑灵名字,以下这些名字有没有更适合你的,一起来看看吧。 梦非梦…