为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2018-12-06 16:37:29
 为啥是false呢?  还有,double s3 = i<100?90:100.0;     //不报错int s3 = i<100?90:100.0;     //报错说明 这个三母运算符返回值是一个浮点数,而不再是原来的整型数90了这中间发生什么了
查看完整描述

5 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

  • 如果两个操作数中有一个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可能损失精度,故报错。

查看完整回答
反对 回复 2018-12-16
?
杨魅力

TA贡献1811条经验 获得超6个赞

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

查看完整回答
反对 回复 2018-12-16
?
慕仙森

TA贡献1827条经验 获得超7个赞

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

查看完整回答
反对 回复 2018-12-16
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

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

查看完整回答
反对 回复 2018-12-16
?
慕容森

TA贡献1853条经验 获得超18个赞

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

查看完整回答
反对 回复 2018-12-16
  • 5 回答
  • 0 关注
  • 1159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信