黑马程序员技术交流社区
标题:
求大神解释原理
[打印本页]
作者:
曾宇
时间:
2016-2-25 15:06
标题:
求大神解释原理
今天在论坛被一个问题问到了。简单来说就是下面这句话。
System.out.println(true ? 1 : 2.0);输出1.0
我能理解的是,三元运算符,相当于一个表达式,和==,+,=这些等同。
两个值做比较的时候,会自动向高精度转型。
可以boolean并不是基础数据类型。三元运算符是怎么给他转换了的。
既然输出的不是0,那么肯定是输出了2。
应该输出2,实际却输出1.0。那么一定是有精度损失。
我想问的是,我这样的理解是否有问题。
同时请大神做更深入的解释。指正观点
作者:
liu1097974712
时间:
2016-2-25 18:39
当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:
1.若果两个操作数不可转换,则不做转换,返回值为Object类型。
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。
4.若两个操作数字都是直接数字。则返回值类型为范围较大者。(此题原因)
作者:
liuxiaoye
时间:
2016-2-25 21:30
学习了,这个真不知道
作者:
苍山雪
时间:
2016-2-25 23:08
学习下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2