我對這個程序的輸出有點迷惑:Java JLS是否指定原始包裝類型的提升?
public class xx {
public static void main(String[] args) throws Exception {
Number x = false ? new Long(123) : new Integer(456);
System.out.println(x + " isa " + x.getClass().getName());
}
}
這裏就是它輸出:
456 isa java.lang.Long
它出現的編譯器是「促進」 Integer
類型的對象,以Long
,就像它通常會促進原始價值。我從來沒有聽說過對象促銷,這種行爲似乎很令人驚訝。
我的問題:根據JLS,這真的是正確的行爲嗎?如果是這樣,我希望儘可能看到參考。
或者是這種某種自動裝箱已經消失的編譯器錯誤?
我使用:
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)