Wrapperklassen
In der Theorieeinheit zum Thema Arrays und Strings, haben wir bereits gesehen, dass sich die primitiven Datentypen in Java etwas anders verhalten als Referenzdatentypen.
Bei primitiven Datentypen wird ein Wert erstellt, indem wir den Wert direkt als Literal im Text angeben.
Bei Referenzdatentypen, wozu auch alle selbst definierten Datentypen gehören, verwenden wir hingegen den Operator new
um einen Wert zu erstellen.
Dieser Unterschied deutet darauf hin, dass Werte von primitiven Datentypen in Java keine Objekte sind.
Dies zeigt sich auch bei den Operationen.
Bei Objekten verwenden wir die Punktsyntax, um Methoden auf den Werten anzuwenden.
Bei primitiven Datentypen stehen uns hingegen meist spezielle Operatoren, wie zum Beispiel die arithmetischen Operatoren +
oder -
zur Verfügung.
Dass Java diese zwei Arten von Datentypen unterscheidet, ist konzeptionell unschön und hat mit der Geschichte von Java zu tun. Als die erste Version von Java entwickelt wurde, waren Computer noch sehr langsam. Dass Erzeugen und Arbeiten mit Objekten hat verhältnismässig viel Rechenleistung gekostet. Dies weil über die Repräsentation von Objekten und das Aufrufen von Methoden eine Indirektion eingeführt wird. Es war also viel effizienter direkt mit primitiven Datentypen zu arbeiten.
Aus heutiger Sicht wäre es natürlich angenehmer, wenn wir alle Datentypen in Java gleichbehandeln könnten und nicht zwei Arten von Datentypen unterscheiden müssten, welche sich unterschiedlich verhalten. Leider war es nicht mehr möglich, diese Unterschiede ganz verschwinden zu lassen. Jedoch hat Java zu jedem primitiven Datentyp, einen Wrapper Datentyp eingeführt. Dieser hat genau denselben Wertebereich wie der entsprechende primitive Datentyp, ist aber ein Referenztyp. Damit haben wir die Wahl, jeden Wert eines primitiven Datentyps in ein Objekt umzuwandeln und dann stattdessen mit diesem zu arbeiten.
Die folgende Tabelle enthält eine Übersicht über die primitiven Datentypen und deren Wrapper (die mit * markierten Typen wurden nur im Praxisteil dieser Vorlesung besprochen):
Primitiver Datentyp | Wrapper | |
---|---|---|
int | Integer | |
double | Double | |
boolean | Boolean | |
char | Character | |
float | Float | * |
short | Short | * |
long | Long | * |
byte | Byte | * |
Wie diese Typen benutzt werden, ist in folgendem Code illustriert:
Experimente
- Erstellen Sie Werte vom Typ
Boolean
undDouble
. - Können Sie Werte von primitiven Datentypen dem entsprechenden Referenzdatentypen zuweisen?
- Können Sie einen Wert vom Typ
Integer
einem Wert von TypLong
zuweisen, wie das bei primitiven Typen möglich ist? - Was macht die Methode
toString
?
Haben Sie Fragen oder Bemerkungen? Schreiben Sie diese doch ins Forum.