Wie funktioniert Java Auto Boxing / Unboxing?
Seit JDK 5.0 wurde das automatische Boxen / Unboxen in Java eingeführt. Der Trick ist einfach und hilfreich, aber als ich anfing, verschiedene Konvertierungen zwischen Wrapper-Klassen und primitiven Typen zu testen, war ich ziemlich verwirrt darüber, wie das Konzept des automatischen Boxens in Java funktioniert :
Boxen
int intValue = 0;
Integer intObject = intValue;
byte byteValue = 0;
intObject = byteValue; // ==> Error
Nachdem Sie verschiedene Fälle ausprobiert haben (short
, long
, float
, double
), der einzige Fall, der vom Compiler akzeptiert wird, ist, wenn der Typ des Wertes auf dem Rechtsoperator istint
. Als ich in die Quelle vonInteger.class
Ich fand, dass es nur einen Konstruktor mit implementiertint
Parameter.
Mein Fazit ist also, dass das Konzept des Auto-Boxens auf dem Konstruktor basiert, der in der Wrapper-Klasse implementiert ist. Ich möchte wissen, ob diese Schlussfolgerung zutrifft oder ob es ein anderes Konzept für das automatische Boxen gibt.
Unboxing
Integer intObject = new Integer(0);
byte byteValue = intObject; // ==> Error (the same Error with short)
int intValue = intObject;
double doubleValue = intObject;
Meine Schlussfolgerung zum Unboxing ist, dass die Wrapper-Klasse den Wert angibt, der vom Objekt in den entsprechenden Typ eingeschlossen wird (Integer
==>int
), dann verwendet der Compiler die üblichen Regeln zum Konvertieren primitiver Typen (byte
=>short
=>int
=>long
=>float
=>double
). Ich möchte wissen, ob diese Schlussfolgerung zutrifft oder ob beim automatischen Unboxing ein anderes Konzept verwendet wird.
Danke für den Fortschritt :)