A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾宇 中级黑马   /  2016-2-25 15:06  /  859 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天在论坛被一个问题问到了。简单来说就是下面这句话。
System.out.println(true ? 1 : 2.0);输出1.0

我能理解的是,三元运算符,相当于一个表达式,和==,+,=这些等同。
两个值做比较的时候,会自动向高精度转型。

可以boolean并不是基础数据类型。三元运算符是怎么给他转换了的。
既然输出的不是0,那么肯定是输出了2。
应该输出2,实际却输出1.0。那么一定是有精度损失。
我想问的是,我这样的理解是否有问题。
同时请大神做更深入的解释。指正观点

3 个回复

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

1.若果两个操作数不可转换,则不做转换,返回值为Object类型。

2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。

3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。

4.若两个操作数字都是直接数字。则返回值类型为范围较大者。(此题原因)

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 很给力!

查看全部评分

回复 使用道具 举报
学习了,这个真不知道
回复 使用道具 举报
学习下                           
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马