Java开发高质量代码建议1:三元操作符的类型务必一致

news2025/7/19 21:01:52

在Java开发中,三元操作符是 if-else 的简化写法,在项目中使用它的地方很多,也非常好用,但是好用又简单的东西并不表示就可以随便用,如下代码:

public class Main {
    public static void main(String[] args) {
        int i = 90;
        String s = String.valueOf(i < 200 ? 99 : 101);
        String s1 = String.valueOf(i < 200 ? 99 : 101.0);
        System.out.println("两者是否相等:" + s.equals(s1));
    }
}

运行结果如下:
在这里插入图片描述

结果分析:

i是90,肯定小于200,两者返回的值肯定都是99,但是这个99是有区别的:

  • s 是 执行三元判断,返回整型的 99,然后再转String,实际为字符串类型的“99”
  • s1 是执行三元判断后,返回浮点型的 99.0,然后再转String,实际为字符串类型的“99.0”

在101 和 101.0 这两个数字中,在变量 s 中,三元操作符中的第一个操作数(99)和第二个操作数(101)都是 int 类型,类型相同,返回的结果也就是 int 类型的 99

而变量 s1 的情况就有点不同了,第一个操作数是 99(int 类型),第二个操作数却是 101.0,而这是个浮点数,也就是说两个操作数的类型不一致,可三元操作符必须要返回一个数据,而且类型要确定,不可能条件为真时返回 int 类型,条件为假时返回 float 类型。编译器是不允许如此的,所以它就会进行类型转换了,int 型转换为浮点数 99.0,也就是说三元操作符的返回值是浮点数 99.0,那这当然与整型的 99 不相等了。

为什么是整型转为浮点,而不是浮点转为整型呢?

这就涉及三元操作符类型的转换规则:

  • 若两个操作数不可转换,则不做转换,返回值为 Object 类型。
  • 若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int 类型转换为 long 类型,long 类型转换为 float 类型等。
  • 若两个操作数中有一个是数字 S,另外一个是表达式,且其类型标示为 T,那么,若数字 S 在 T 的范围内,则转换为 T 类型;若 S 超出了T 类型的范围,则 T 转换为 S 类型。
  • 若两个操作数都是直接量数字(Literal [1] ,则返回值类型为范围较大者。

结论:

保证三元操作符中的两个操作数类型一致,即可减少可能错误的发生。

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

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

相关文章

ZYNQ之FPGA学习----Vivado功能仿真

1 Vivado功能仿真 阅读本文需先学习: FPGA学习----Vivado软件使用 典型的FPGA设计流程&#xff0c;如图所示&#xff1a; 图片来自《领航者ZYNQ之FPGA开发指南》 Vivado 设计套件内部集成了仿真器 Vivado Simulator&#xff0c;能够在设计流程的不同阶段运行设计的功能仿真和…

搞笑段子很皮的文案系列001,可爱有趣文案系列合集

大家好&#xff0c;我是我赢助手&#xff0c;专注于自媒体短视频去水印、去重和文案提取运营。 今天给大家分享下收集的一些文案&#xff1a;搞笑段子很皮的文案系列 1. 女人之间不用吵架&#xff0c;你比她漂亮就行了。 2. 暧昧&#xff0c;把这两个字拆开&#xff0c;就是真…

docker centos7容器中文乱码问题解决

中文乱码与yum安装失败问题 如下图所示&#xff0c;往文件里输入内容&#xff1a;测试中文乱码问题&#xff0c;结果发现乱码。 甚至如果文件名带有中文也会乱码。 执行locale命令&#xff0c;如下所示。 LANGen_US.UTF-8 LC_CTYPE"en_US.UTF-8" LC_NUMERIC"…

C++:重定义:符号重定义:变量重定义(二):解决变量重定义

C&#xff1a;重定义&#xff1a;符号重定义&#xff1a;变量重定义_hongwen_yul的博客-CSDN博客 上一篇文章中&#xff0c;我们知道解决变量重复定义其中一个办法是&#xff1a;尽量不要头文件中定义变量&#xff0c;头文件只做变量的声明。但是如果我们一定要在头文件中定义…

【2022最新核心面试资料 】最强Java面试八股文秋招offer召唤术!入职薪资53k

前言 我分享的这份秋招 Java 后端开发面试总结包含了 JavaOOP、Java 集合容器、Java 异常、并发编程、Java 反射、Java 序列化、JVM、Redis、Spring MVC、MyBatis、MySQL 数据库、消息中间件 MQ、Dubbo、Linux、ZooKeeper、 分布式 &数据结构与算法等 25 个专题技术点&…

图像生成模型简介

因为DALLE 2是基于CLIP和GLIDE模型写的&#xff0c;作者在写论文的时候弄得十分简略&#xff0c;所以直接看那篇论文可能并不会获得很多信息。今天先帮大家区分一下几个生成模型的区别。 GAN 图片来源&#xff1a;What are Diffusion Models? | LilLog (lilianweng.github.io)…

rsync远程同步

目录 一、rsync简介 1.1 rsync介绍 1.2 rsync同步方式 二、rsync特性 三、rsync与cp、scp对比 四、rsync命令 五、rsync本地复制实例 六、配置源的两种表示方法 七、Rsync 同步源 八、配置 Rsync 下行同步 九、inotify简介 十、配置RsyncInotify 实时同步 十一、r…

【linux kernel】基于ARM64分析linux内核的链接脚本vmlinux.lds.S

文章目录一、导读二、链接器是什么三、链接脚本四、linux内核的链接脚本4-1 头文件包含描述4-2 参数设置和宏定义描述4-3 SECTIONS内容分析五、linux内核的“头”六、总结一、导读 在linux内核中&#xff0c;arch目录下放置的是关于linux内核所支持的具体架构相关的代码描述文…

EFK部署centos7.9(一)ES单节点部署

Elasticsearch部署 系统类型&#xff1a;Centos7.9 节点IP&#xff1a;192.168.11.139 软件版本&#xff1a;jdk-8u121-linux-x64.tar、elasticsearch-6.5.4.tar. 1.首先上传jdk的包 tar xzf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压jdk的包 cd /usr/local/ 切…

逻辑回归预测瘀血阻络证||LogRegression 二分类 python3

要求 把数据集分为训练集和测试集使用逻辑回归训练、预测&#xff0c;得出相应的分类指标准确率accuracy&#xff0c;精确率precision&#xff0c;召回率recall&#xff0c;F1-score&#xff0c;并画出最终的ROC曲线&#xff0c;得出AUC值。 数据格式 664条样本 每条103个属性…

列的类型定义——整形类型

文章目录 前言一、整数类型的附带属性 类型名称后面的小括号unsignedauto_increment总结前言 1&#xff09;采用26字母和0-9的自然数加上下互相 ‘_’ 组成&#xff0c;命名简洁明确&#xff0c;多个单词用下划线 ‘_’ 隔开 2&#xff09;全部小写命名&#xff0c;尽量避免出…

猿创征文|计算机专业硕博研究生提高效率的10款科研工具

前言 大家好&#xff0c;我是帝都某高校的一名在读研究生&#xff0c;研究方向为人工智能安全、强化学习、漏洞挖掘。今天想跟各位计算机相关专业的硕士生、博士生们分享几款超级实用并且能够提高科研效率的工具&#xff01;&#xff01;&#xff01;希望能够得到大家的一键四…

【角点检测】 基于各向异性高斯方向导数滤波器实现图像角点检测附matlab代码

1 内容介绍 为了改进噪声鲁棒性和定位准确性,利用各向异性高斯方向导数滤波器,提出多方向角点检测算法.该算法利用一组各向异性高斯方向导数滤波器对输入图像进行卷积处理得到各个方向的滤波器响应.对于每个像素点,利用它与周围邻近像素点的滤波器响应的相关信息构造局部自相关…

Revit导入Cad图元丢失不正确解决和链接CAD功能

一、导入Cad图元丢失或者图元不正确解决&#xff1a; 导入Cad的时候我们会遇到导入图元丢失或者图元不正确等情况&#xff0c;具体解决如下 01.天正画图时一定要导出t3格式&#xff0c;因为Revit只识别t3版本 02.Cad画图时&#xff0c;最后一定要将图元炸开&#xff0c;然后在框…

NVIDIA NCCL 源码学习(五)- 路径计算

上节NCCL完成了对机器PCI系统拓扑的建图&#xff0c;其中建好的图如下所示&#xff0c;其中GPU之间是通过NVLink连接起来的 为了方便之后的搜索channel&#xff0c;接下来NCCL会先计算GPU和NIC节点到其他任意节点之间的最优路径&#xff0c;以及对应的带宽&#xff0c;即最优路…

Vue3基础——Composition API初体验、合成API详解、setup、Provide 和 inject

文章目录p19 组合式 API (Composition API)初体验p20 Vue3合成API详解p21 setup中使用生命周期函数p22 Provide 和 injectp19 组合式 API (Composition API)初体验 <template><h1 click"add">计数count: {{ count }}</h1><h1 click"incre…

51单片机笔记:定时器/计数器

单片机笔记 定时器/计数器 定时器/计数器的结构 AT89S51内部两个16位定时器/计数器&#xff1a;T0(P3.4)&#xff0c;T1(P3.5)&#xff0c;定时器/计数器T0由特殊寄存器TH0,TL0构成&#xff0c;T1由特殊功能寄存器TH1&#xff0c;TL1构成 T0,T1都有定时器和计数器两种工作模…

DuckDB学习-初识tpcds

DuckDB学习-1 文章目录DuckDB学习-1跑TPC-DS编译DuckDB支持TPC-DS扩展执行数据生成及查询TPC-DS简单分析&#xff08;v3.2.0&#xff09;事实表维度表跑TPC-DS 编译DuckDB支持TPC-DS扩展 下载代码&#xff0c;然后进源码目录&#xff0c;执行下面两个步骤。 export BUILD_TPC…

Word控件Spire.Doc 【文本】教程(19) ;如何在 C#、VB.NET 中通过 Word 中的正则表达式查找和替换文本

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

【附源码】计算机毕业设计JAVA车辆调度管理系统

【附源码】计算机毕业设计JAVA车辆调度管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…