【发布时间】:2015-02-01 20:06:32
【问题描述】:
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);
【问题讨论】:
-
我觉得在这两种情况下你都得到
Integer很奇怪,但只是打印时的格式不同。 -
是的,o1、o2 都是整数。
-
我通过 instanceof 进行了尝试,第二个结果为 false。
o1 instanceof Integer结果为真,o2 instanceOf Integer结果为假.. 所以这意味着 o2 不是整数 -
这确实是非常奇怪的行为。 o2 实际上是双精度数。
-
它绝对是一个 Double。我打印了类名。查看我关于自动装箱的答案
标签: java ternary-operator