java puzzler - 三目运算

看看程序运行后,在控制台上会输出?

A. 3
B. 1.0
C. 抛出异常
D. 以上都不是

 

 

答案:D 3.0

下面是 Java Language Specification 上关于条件表达式的说明

_____如果第二和第三个操作数在可以转换为数值类型时,会有以下几种情况:
________操作数其中一个是 byte 或 Byte 类型,而另一个是 short 或 Short 类型,那么
_________ 这个表达式就是 shoft 类型
________操作数中的一个是类型 T (T 可以是 byte、short 或者是 char 类型),而另一个
_________ 是 int 类型的常数,其可以用 T 类型来表示时,那么这个表达式就是 T 类型
________操作数中的一个是 Byte 类型,而另一个是 int 类型的常数,其可以用 byte 类型来
_________ 表示,那么这个表达式就是 byte 类型
________操作数中的一个是 Short 类型,而另一个是 int 类型的常数,其可以用 short 类型
_________ 来表示,那么这个表达式就是 short 类型
________操作数中的一个是 Character 类型,而另一个是 int 类型的常数,其可以用 char 类
_________ 型来表示,那么这个表达式就是 char 类型
________否则,双目数值提升(binary numeric promotion)会被用于操作数的类型中,条件表
_________ 达式的类型是第二个和第三个操作数提升后的类型。注意:双目数值提升时进行拆箱转换和
_________ 值集转换(value set conversion)


更多的看 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#341287

这个问题会用到最后一点,即进行双目数值提升,所谓的双目数值提升通俗点的描述
是:两个数根据一定的规则把其中一个的类型转为另一个类型。

根据 Java Language Specification 中关于双目数值提升的描述
http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#170983

_____如果任意一个操作数是 float 类型,那另外一个会被转换成为 float 类型

 

所以,不要在条件运算的操作数中使用不同的数据类型,并且条件运
算符与 if...else 结构性质并不是完全相同的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值