首页 新闻 会员 周边 捐助

三目运算符 表达式1?表达式2:表达式3

0
悬赏园豆:10 [已解决问题] 解决于 2016-09-25 23:43
 为啥是false呢?
 还有,
double s3 = i<100?90:100.0;     //不报错
int s3 = i<100?90:100.0;     //报错
说明 这个三母运算符返回值是一个浮点数,而不再是原来的整型数90了

这中间发生什么了
cxccc的主页 cxccc | 初学一级 | 园豆:162
提问于:2016-09-21 09:03
< >
分享
最佳答案
0
  • 如果两个操作数中有一个double类型,另一个操作数就会转换为double类型。
  • 否则,如果其中一个操作数为float类型,另一个操作数就会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另一个操作数就会转换为long类型。
  • 否则,两个操作数都将被转换为int类型。

  上面是转换规则,你的三目操作符中有double类型的值,所以会转换成double类型比较,最后得到的结果是s1="90",s2="90.0",调用equals后自然不等了。

按照上述转换规则,int s3 = i<100?90:100.0; 返回的值是double类型的,赋值给int类型的s3可能损失精度,故报错。

收获园豆:10
萧萧弈寒 | 初学一级 |园豆:170 | 2016-09-21 16:23

 有道理

Dmego | 园豆:246 (菜鸟二级) | 2016-10-09 10:27
其他回答(4)
1

第二个报错是因为你的90跟100.0类型不一致吧???如果一致,应该不报错。。。

顾晓北 | 园豆:10898 (专家六级) | 2016-09-21 09:11
0

你直接输出s1,s2不久知道了...

吴瑞祥 | 园豆:29449 (高人七级) | 2016-09-21 09:26
0

s1和s2的类型不一致,肯定返回false啊

风归云隐 | 园豆:416 (菜鸟二级) | 2016-09-21 09:32
0

类型不一致吧。所以会报错吧。

fcyh | 园豆:568 (小虾三级) | 2017-04-04 13:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册