public static void main(String[] args) {
Object o=true?new Integer(1):new Double(1.0);
System.out.println(o);
}
我得到1.0作为输出,首先上面的 else 语句是无法访问的,但是它是如何自动类型转换的。
public static void main(String[] args) {
Object o=true?new Integer(1):new Double(1.0);
System.out.println(o);
}
我得到1.0作为输出,首先上面的 else 语句是无法访问的,但是它是如何自动类型转换的。
JLS 指出
加宽原语转换(第 5.1.2 节)适用于转换由以下规则指定的一个或两个操作数: • 如果任一操作数为 double 类型,则另一个操作数转换为 double。
那是在一个表达式中
true? Integer(1) : Double(1.0)
因为这里的操作数之一是 Double ,所以返回类型也是 double
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6
关键字是“数字提升”:
数字提升用于将数字运算符的操作数转换为通用类型,以便可以执行操作。两种数字提升是一元数字提升(第 5.6.1 节)和二进制数字提升(第 5.6.2 节)。
sᴜʀᴇsʜ ᴀᴛᴛᴀ 已经给了你一个链接来解释你的具体例子。