Home > Informatik > Begriffe und Konzepte > Autoboxing

Autoboxing

Diese Seite ist eine überarbeitete Version des älteren Lexikon-Artikels

Was ist Autoboxing ?

Unter Autoboxing versteht man in Java die automatische Umwandlung eines primitiven Datentyps in ein Objekt der entsprechenden Wrapper-Klasse. Diese Umwandlung wird vom Compiler automatisch vorgenommen, wenn ein Objekt erwartet wird, aber ein primitiver Wert übergeben wird.

Java unterscheidet grundsätzlich zwischen primitiven Datentypen wie int, double oder boolean und Objekten. Viele Klassen aus der Java-Bibliothek, zum Beispiel die Klasse ArrayList, können jedoch nur Objekte speichern. Primitive Werte müssen daher normalerweise zuerst in Objekte umgewandelt werden.

Zu jedem primitiven Datentyp gibt es eine passende Wrapper-Klasse, beispielsweise Integer für int, Double für double und so weiter. Vor Java 5 musste die Umwandlung

primitiver Datentyp → Objekt einer Wrapperklasse

immer ausdrücklich im Quelltext erfolgen, beispielsweise so:

ArrayList zahlen = new ArrayList<>();

int a = 12;
zahlen.add(Integer.valueOf(a));

Hier wird der primitive int-Wert a zunächst mit Integer.valueOf() in ein Objekt der Klasse Integer umgewandelt. Erst dieses Objekt kann dann in das ArrayList-Objekt zahlen eingefügt werden.

Automatische Umwandlung seit Java 5

Seit Java 5 übernimmt der Compiler diese Umwandlung automatisch. Man kann daher einfach schreiben:

ArrayList zahlen = new ArrayList<>();

int a = 12;
zahlen.add(a);      // Autoboxing

Der Compiler behandelt diese Anweisung intern so, als hätte man geschrieben:

zahlen.add(Integer.valueOf(a));

Diese automatische Umwandlung eines primitiven Wertes in ein Wrapper-Objekt nennt man Autoboxing.

Autoboxing funktioniert aber nicht nur mit int, sondern mit allen primitiven Datentypen, wie das folgende Beispiel zeigt:

ArrayList messwerte = new ArrayList<>();

double temperatur = 21.5;
messwerte.add(temperatur);

Autoboxing macht Programme kürzer und besser lesbar, weil die explizite Umwandlung mit Methoden wie Integer.valueOf() oder Double.valueOf() meist nicht mehr notwendig ist.