Java三元运算符——类型必须一致

一、分析

当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:

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

二、场景

Example.png

分析,两个三元操运算,条件都为真,返回第一个值,结果“两者是否相等:true”。结果果真如此吗?结果“两者是否相等:false”!

问题出在于100和100.0这两个数字上:
在变量s中,第一个操作数(90)和第二个操作数(100)都是int类型,类型相同,返回的是int型的90;
在变量s1中,第一个操作数类型为(90)int类型,第二个操作数是(100.0)浮点型。
可是三元操作符必须返回同一个数据,而且类型要确定,不可能条件为真返回int类型,条件为假返回float类型,编译器是不会允许的,所以进行类型转换了。int转换成90.0,也就是所返回值是90.0当然和90不相等了。

三、建议

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,946评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,442评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,421评论 19 139
  • 从小到大,我一直在做一件事:讨好! 小时候为了混口吃喝,在自我意识还很朦胧的情况下,开始讨好父母和长辈们。上学以后...
    水静花间阅读 845评论 0 0
  • 各位亲爱的读者朋友们,大家好! 我是《靖康风云》的作者lemoney! 今天这个文是更正帖,希望大家能够谅解我的连...
    lemoney阅读 4,459评论 1 3