WikiDer > Boxen (Computer)

Boxing (informatica)

In dem Informatik ist Boxen ein Mechanismus, um primitive Typen einpacken Objekte. Diese Technik kann nur vorhanden sein in Programmiersprachen wobei zwischen primitiven Typen und Objekten unterschieden wird.

Überblick

Der Unterschied Datenstrukturen und Sprachelemente, wie z Listen und Arrays, bieten unterschiedliche Funktionen: Beispielsweise kann eine Liste die Größe ändern, während ein Array eine feste Größe hat. Ein Array kann normalerweise verwendet werden, um primitive Typen und Objekte zu speichern, während eine Liste nur Objekte zulässt, wie z LinkedList im Java.

Manchmal ist es wünschenswert, primitive Typen zu verwenden, wie z int, kann auch in a gespeichert werden LinkedList; dies ist normalerweise nicht möglich, da man nur Objekte in eine Liste aufnehmen kann. Mithilfe von Boxen können die primitiven Typen in ein Objekt eingefügt werden, um dies zu ermöglichen: die ints kann verpackt werden Ganze ZahlObjekte und lege sie dann in a LinkedList aufhören (mit generisch kann dieser Typ seit Java 5.0 als LinkedList merken).

Autoboxen

Der Begriff Autoboxen wird für Boxen verwendet, die automatisch ohne Extra ablaufen Quellcode. Das Compiler generiert automatisch den zusätzlichen Code, der benötigt wird, um Typumwandlung zu ermöglichen.

Seit Java 5.0 ist es beispielsweise möglich, LinkedList von ints zu machen. Dies widerspricht nicht dem Obigen: a LinkedList kann immer noch nur Objekte und keine primitiven Typen enthalten. Aber wenn Java jetzt einen primitiven Typ erhält, wenn es ein Objekt erwartet, wandelt der Compiler automatisch den primitiven Typ in ein Objekt um.

Dies wird als Autoboxing bezeichnet, da die Konvertierung automatisch und implizit ohne Arbeit von der Programmierer.

Auspacken

Unboxing ist das Gegenteil von Boxing: das Extrahieren des primitiven Typs aus einem Objekt.

In Java vor Version 5.0 wurde der folgende Code nicht kompiliert:

Ganze Zahlich=NeuGanze Zahl(9);Ganze Zahlja=NeuGanze Zahl(13);Ganze Zahlk=ichja;// Error!

Seit Java 5.0 geworden ich und ja entpackt zu int, addiert und die Summe wird wieder in eine neue Box geschachtelt Ganze Zahl. Ursprünglich hat der Compiler die letzte Zeile nicht akzeptiert: Ganze Zahl-Objekte unterscheiden sich auf den ersten Blick nicht von anderen Objekten wie LinkedList und Objekt und mathematische Operationen, wie z , sind dafür nicht definiert. Der folgende Code wird akzeptiert:

intich=9;intja=13;intk=ichja;

Ein anderes Beispiel:

intX=4;intja=5;// Integer qBox = new Integer(x y);Ganze ZahlqBox=Xja;// wäre falsch, aber jetzt erlaubt - entspricht der vorherigen Zeile