从java程序获得意外输出时的困惑

时间:2013-10-11 06:01:08

标签: java

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

我得到 1.0 作为输出,首先是上面的其他声明无法访问,但它是如何自动输入的。

2 个答案:

答案 0 :(得分:3)

JLS声明

  

扩展基元转换(第5.1.2节)用于转换其中一个或两个   操作数由以下规则指定:   •如果任一操作数的类型为double,则另一个操作数将转换为double。

表达式

true? Integer(1) : Double(1.0)

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

答案 1 :(得分:1)

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

关键字是“数字促销”:

  

数字促销用于转换数字的操作数   操作符为通用类型,以便可以执行操作。该   两种数字促销是一元数字促销(§5.6.1)   和二进制数字促销(§5.6.2)。

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