Ich bin etwas verwirrt durch die Ausgabe dieses Programms:Gibt die Java JLS die Heraufstufung primitiver Wrapper-Typen an?
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());
}
}
Hier ist, was es gibt:
456 isa java.lang.Long
Es scheint, der Compiler ein Objekt vom Typ Integer
zu Long
ist „Förderung“, wie es würde normalerweise primitive Werte fördern. Ich habe noch nie von Objekt Promotion gehört und dieses Verhalten scheint sehr überraschend.
Meine Frage: Ist das wirklich richtiges Verhalten nach der JLS? Wenn ja, würde ich gerne eine Referenz sehen, wenn möglich.
Oder ist das eine Art von Autoboxing-Wild-Compiler Bug?
Ich verwende:
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)