Pha*_* VU 12 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);
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例代码中,通过使用条件运算符(?:),我可以在一行中重写上面的示例.所以,我认为o1和o2的结果必须相同.但是,奇怪的是,结果如下:
5
5.0
Run Code Online (Sandbox Code Playgroud)
你能帮我指点一下这个行为吗?
更新:结果与以下代码相同:
Object o2 = true ? (Object) new Integer(5) : new Double(2.0);
Run Code Online (Sandbox Code Playgroud)
这似乎是Autoboxing的副作用.的?运算符尝试确定哪个是可以应用于Object的基类型.它在右侧看到Double,而Integer也可以自动装箱到Double.
也许这样做是因为Integer可以装箱为Double,但Double不能装箱到Integer?
请注意,这会产生相同的结果......
Object o2 = true ? 5 : new Double(2.0);
Run Code Online (Sandbox Code Playgroud)