三元操作符的类型误区
2014-04-23 09:27
267 查看
public static void main(String[] args) { int i = 80; String s = String.valueOf(i < 100 ? 90 : 100); String s1 = String.valueOf(i < 100 ? 90 : 100.0); System.out.println(s); System.out.println(s1); System.out.println("两者是否相等:" + s.equals(s1)); }
以上执行结果为:
90
90.0
两者是否相等:false
为什么呢,三元操作符类型自动转换了!
转换规则:
若两个操作数不可转换,则不做转换,返回值为Object类型。
若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型(可以参考《编写高质量代码:改善Java程序的151个建议》“建议22”,会对该问题进行展开描述)。
若两个操作数都是直接量数字(Literal),则返回值类型为范围较大者。
相关文章推荐
- JAVA开发陷阱第三篇(三元操作符类型务必一致)
- 三元操作符的类型务必一致
- [改善Java代码]三元操作符的类型务必一致
- 三元运算符 比较三个数大小 三元操作符的类型务必一致
- Java三元操作符注意后面两个操作符的类型
- 提高你的Java代码质量吧:三元操作符的类型陷阱
- java填坑:三元操作符的类型不一致导致的问题
- 建议3:三元操作符的类型务必一致
- 读书总结---三元操作符类型保持一致
- 三元操作符的类型务必一致
- 类型转换操作符:static_cast, dynamic_cast, const_cast, reinterpret_cast.
- C++中的类型转换操作符
- JavaScript第三课——数据类型(typeof操作符、Undefined类型、Null类型、Boolean类型)
- PHP强制对象类型之instanceof操作符
- [C++再学习系列] 隐式类型转换与转换操作符operator T
- 在外围类作用域之外引用外围类的静态成员,类型名和枚举名都要求有解析操作符
- 先知JS分享第二讲 数据类型与操作符
- javascript变量和数据类型以及typeof操作符
- 细说C++类型转换操作符
- VBScript学习笔记--第一章.数据类型和操作符