Java三元运算符——类型必须一致
2018-01-09 10:08
459 查看
一、分析
当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:若果两个操作数不可转换,则不做转换,返回值为Object类型。
若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。
若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。
若两个操作数字都是直接数字。则返回值类型为范围较大者。
二、场景
分析,两个三元操运算,条件都为真,返回第一个值,结果“两者是否相等:true”。结果果真如此吗?结果“两者是否相等:false”!
问题出在于100和100.0这两个数字上:
在变量s中,第一个操作数(90)和第二个操作数(100)都是int类型,类型相同,返回的是int型的90;
在变量s1中,第一个操作数类型为(90)int类型,第二个操作数是(100.0)浮点型。
可是三元操作符必须返回同一个数据,而且类型要确定,不可能条件为真返回int类型,条件为假返回float类型,编译器是不会允许的,所以进行类型转换了。int转换成90.0,也就是所返回值是90.0当然和90不相等了。
三、建议
保证三元操作符中的两个操作类型一致,即可减少错误的发生。转自http://blog.csdn.net/yu_rong/article/details/49474141
相关文章推荐
- Java三元运算符——类型必须一致
- 标准表达式中数据类型不匹配(Access) - 参数化顺序必须一致!
- main()方法为啥必须要public static void类型的??java中的静态成员
- 阿里巴巴java开发手册中的为什么说所有的 POJO 类属性必须使用包装数据类型?
- delegate, event - 里面涉及的参数类型必须完全一致,子类是不行的
- SSAS事实表和维度表数据类型必须一致
- 三元运算符 比较三个数大小 三元操作符的类型务必一致
- java三元运算符操作,返回数据类型转换
- java和mysql定义的字段类型不一致,前端取值问题
- delegate, event - 里面涉及的参数类型必须完全一致,子类是不行的
- Dos 下编译java文件引用到多个第三方jar时必须逐个指定到具体的jar,否则报找不到类型错误
- SSAS事实表和维度表数据类型必须一致
- new和delete的指针类型必须一致,否则会造成未定义行为
- 【慕课笔记】第三章 JAVA中必须了解的常用类 第3节 JAVA中基本类型和字符串之间的转换
- java配置xml报cvc-complex-type.2.3: 元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”
- Java的类名与文件名必须一致
- Java之戳中痛点 - (3)三目运算符的两个操作数类型尽量一致
- Java三元运算符类型提升
- Java中使用System.out.printf().如何控制输出格式及类型不一致的解决方法
- Java 条件表达式结果类型不一致问题