看看程序运行后,在控制台上会输出?
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 结构性质并不是完全相同的。