Java How To
 


Autoboxing und Unboxing

How To ...

Ein- und Auspacken primitiver Datentypen in/aus den entsprechenden Wrapper-Typen.

Hintergründe

Bereits seit Version 1.0 kennt Java neben den primitive Datentypen auch deren Wrapper, z.B. int und Integer. Die Umwandlung erfolgte durch den entsprechenden Konstruktor bzw. die entsprechende Methode der Klasse Integer.

  Integer i = new Integer(0);
  int j = i.intValue();
		

Da primitive Datentypen keine Objekte sind, müssen sie in ihre entsprechenden Wrapper umgewandelt werden, wenn Referenztypen verlangt sind, etwa beim Einfügen in eine Collection. Umgekehrt muss beim Entnehmen eines Wappers aus einer Collection wieder der primitive Datentyp erzeugt werden.

Seit Java 5.0 geschieht dies automatisch. Beim Einpacken in den Wrapper spricht man von Boxing, beim Entnehmen von Unboxing.

So geht's

Das obige Beispiel vereinfacht sich dann erheblich:

  Integer i = 0;
  int j = i;
		

Die gewohnte Syntax von Java verändert sich mit automatischem Boxing/Unboxing ein wenig. Sie sollten sich aber darüber im Klaren sein, dass sich sonst nichts ändert. Insbesondere werden mathematische Operatoren nicht für Wrapper definiert. Siehe das nachfolgende Beispiel.

  Integer i, j;
  if (i == j) {
	j++;
  }
		

Vergleich und Inkrement sind nach wie vor nicht für Integer definiert! Zunächst erfolgen zwei Unboxings für die beiden Variablen i und j. Dann erfolgt der Vergleich mit zwei ints. Falls diese gleich sind erfolgt ein Unboxing von j zu einem int, der Wert wird inkrementiert und es erfolgt ein Boxing zurück in einen Integer. Sie sollten sich über diesen Laufzeitaufwand immer im Klaren sein.

Formatierter Quell-Code

Java-Source