1
public static void main(String[] args) {
  Object o=true?new Integer(1):new Double(1.0);
  System.out.println(o);
 }

我得到1.0作为输出,首先上面的 else 语句是无法访问的,但是它是如何自动类型转换的。

4

2 回答 2

3

JLS 指出

加宽原语转换(第 5.1.2 节)适用于转换由以下规则指定的一个或两个操作数: • 如果任一操作数为 double 类型,则另一个操作数转换为 double。

那是在一个表达式中

true? Integer(1) : Double(1.0)

因为这里的操作数之一是 Double ,所以返回类型也是 double

于 2013-10-11T06:17:31.850 回答
1

http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6

关键字是“数字提升”:

数字提升用于将数字运算符的操作数转换为通用类型,以便可以执行操作。两种数字提升是一元数字提升(第 5.6.1 节)和二进制数字提升(第 5.6.2 节)。

sᴜʀᴇsʜ ᴀᴛᴛᴀ 已经给了你一个链接来解释你的具体例子。

于 2013-10-11T06:16:17.673 回答