Auto Boxing und Unboxing in Java: Eine umfassende Erklärung
Automatische Konvertierung zwischen primitiven Datentypen und ihren entsprechenden Wrapper-Klassen, bekannt als Auto Boxing und Unboxing wurde in Java 5.0 eingeführt. Trotz seiner Einfachheit kann es verwirrend sein, das Innenleben dieses Mechanismus zu verstehen.
Auto-Boxen: Ein konstruktorbasierter Mechanismus
Im Gegensatz zu anfänglichen Annahmen ist dies beim Auto-Boxen nicht der Fall ausschließlich auf Konstrukteure angewiesen. Stattdessen wird die Methode valueOf() der Wrapper-Klasse aufgerufen. Diese Methode ermöglicht das Zwischenspeichern und vermeidet unnötige Objekterstellung.
Zum Beispiel wird die Anweisung:
Integer n = 42;
kompiliert zu:
invokestatic #16 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
Unboxing: Abrufen der Primitivwert
Unboxing ruft den Primitivwert aus dem Wrapper-Objekt ab. Ähnlich wie beim automatischen Boxen wird die intValue()-Methode der Wrapper-Klasse verwendet.
Zum Beispiel wird die Anweisung:
int n = Integer.valueOf(42);
kompiliert zu:
invokevirtual #22 // Method java/lang/Integer.intValue:()I
Ausnahmen von der Regel
Auto-Boxing und Unboxing erfolgen normalerweise nahtlos, es gibt jedoch solche Ausnahmen. Wenn beispielsweise ein Byte-Wert in ein Integer-Objekt eingepackt wird, gibt der Compiler einen Fehler aus:
intObject = byteValue; // ==> Error
Diese Einschränkung entsteht, weil der Integer-Wrapper-Klasse ein Konstruktor mit einem Byte-Parameter fehlt.
Weitere Überlegungen
Die Java Language Specification (JLS) beschreibt das automatische Ein- und Auspacken Konvertierungen in §5.1.7 bzw. §5.1.8. Es bietet ein umfassendes Verständnis der zugrunde liegenden Mechanismen und Grenzfälle.
Das obige ist der detaillierte Inhalt vonWie geht Java mit dem automatischen Boxen und Unboxen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!