我遇到了以下代码段,需要帮助来了解幕后发生的事情。
Object o1,o2;
o1 = true?new Integer(2):new Double(3);
if(true){
o2 = new Integer(2);
}else{
o2 = new Double(3);
}
System.out.println(o1 + "\t" + o1.getClass().getName());
System.out.println(o2 + "\t" + o2.getClass().getName());
上面的代码似乎很容易猜到准确的结果,但是当我运行它时,我得到以下输出。
2.0 java.lang.Double
2 java.lang.Integer
看起来JVM在某种情况下将输出(Integer)类型化为第一种情况下的Double而不是第二种情况。
我想知道背后的原因,因为我一直认为 conditional-operator
和 if-else statements
是等效的。< / p>