条件运算符,奇怪的行为

时间:2014-12-04 03:16:33

标签: java ternary-operator

public static void main(String[] args) {
    Object o1;
    if (true)
        o1 = new Integer(5);
    else
        o1 = new Double(2.0);

    Object o2 = true ? new Integer(5) : new Double(2.0);

    System.out.println(o1);
    System.out.println(o2);
}

在上面的示例代码中,通过使用条件运算符(?:),我可以在一行中重写上面的示例。所以,我认为 o1&的结果o2 必须相同。但是,奇怪的是,结果如下:

5
5.0

请各位帮助我指出为什么会出现这种情况?

更新: 结果与以下代码相同:

Object o2 = true ? (Object) new Integer(5) : new Double(2.0);

1 个答案:

答案 0 :(得分:6)

这似乎是Autoboxing的副作用。的?运算符尝试确定哪个是可以应用于Object的基类型。它看到右侧的Double和Integer,它们也可以自动装箱为Double。

也许这样做是因为Integer可以装箱为Double,但Double不能装箱到Integer?

请注意,这会产生相同的结果......

Object o2 = true ? 5 : new Double(2.0);