1. Liste der Wrapper-Typen

Sie wissen, dass Java über 8 primitive Typen verfügt, bei denen es sich um Typen handelt, die keine Klassen sind. Das ist einerseits gut – sie sind einfach und nehmen wenig Platz ein. Andererseits sind Kurse manchmal genau das, was wir brauchen. Warum das genau so ist, erfahren Sie in der nächsten Lektion.

Was kann also getan werden?

Ab der fünften Java-Version erhielt jeder primitive Typ eine Zwillingsklasse. Jede dieser Klassen speichert ein einzelnes Feld mit einem Wert eines bestimmten Typs. Diese Klassen werden Wrapper-Typen genannt , da sie primitive Werte in Klassen einschließen.

Hier ist eine Liste dieser Typen. Kennst du irgendwelche?

Primitiver Typ Wrapper-Klasse
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

Die Namen primitiver Typen beginnen mit einem Kleinbuchstaben, die Namen der Wrapper-Klassen jedoch mit einem Großbuchstaben. Einige der Klassennamen sind auch etwas länger: Integeranstatt intи Characteranstatt char.

Alle Objekte der Wrapper-Klassen sind unveränderlich ( immutable ).

Der vereinfachte Code für die IntegerKlasse sieht etwa so aus:

Code Notiz
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}


Variablenkonstruktor Die Methode gibt einen Wert zurück. Die statische Methode erstellt ein neues Objekt

für eine Variable









Integerint

2. Konvertieren von an intin anInteger

Wrapper-Typen gelten als Gegenstücke zu ihren primitiven Geschwistern: Sie können problemlos ein Wrapper-Objekt erstellen, das einem primitiven Typ entspricht.

Lassen Sie uns den Typ int als Beispiel verwenden, um zu analysieren, wie primitive Typen mit ihren entsprechenden Wrapper-Typen interagieren. Der Code zum Konvertieren von an intin an Integerund umgekehrt würde wie folgt aussehen:

Um ein intin ein umzuwandeln Integer, müssen Sie diesen Code schreiben:

Integer name = new Integer(value);

Wo nameist der Name einer IntegerVariablen und valueder umschlossene intWert?

Beispiele:

Code Notiz
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

Und um das an Integerin ein umzuwandeln int, müssen Sie diesen Code schreiben:

int name = variable.intValue();

Wobei nameist der Name einer intVariablen und variableein Verweis auf ein IntegerObjekt.

Beispiele:

Code Notiz
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

3. Autoboxing und Unboxing

Aber selbst einfache Operationen mit dem IntegerTyp sind nicht einfach zu schreiben.

Wie bereits erwähnt, Integerist der Typ unveränderlich ( unveränderlich ). Um ein IntegerObjekt mit einem neuen intWert zu erstellen, müssen Sie explizit ein neues IntegerObjekt erstellen. intAllerdings ist es einfach, den Wert eines in einem Objekt gespeicherten Objekts abzurufen Integer– rufen Sie einfach die intValue()Methode auf.

Beispiel:

Code Beschreibung
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
5Ein IntegerObjekt einschließen
Den Wert vom IntegerObjekt abrufen
Ein neues IntegerObjekt erstellen (gleich 10)

Das ist ziemlich umständlicher Code, finden Sie nicht?

Das dachten sich die Java-Entwickler und brachten dem Compiler bei, wie er diese Vorgänge automatisch ausführt. Die automatische Konvertierung von an intin an Integerwird als Autoboxing bezeichnet (das automatische Einfügen des Werts in eine Box), und der umgekehrte Vorgang (Konvertieren von an Integerin an int) wird als Unboxing bezeichnet .

Dein Code Was der Compiler sieht
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

Dank Autoboxing und Unboxing können Sie inteiner IntegerVariablen sicher eine zuweisen und umgekehrt. intSie können Ausdrücke beliebiger Komplexität schreiben, ohne zwischen den Typen und zu unterscheiden Integer.

Beispiele:

Code Was der Compiler generiert
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


4. Vergleichen von Wrapper-Variablen

Autoboxing und Unboxing sind einfache und transparente Prozesse. Wir verwenden new Integer()Anweisungen nach Bedarf und rufen die intValue()Methode nach Bedarf auf.

Für Sie als Programmierer funktioniert alles gut und einfach. Denken Sie daran, dass beim Vergleich von an Integerund Integeran der Vergleich auf Referenzen und nicht auf Werten basiert.

Code Konsolenausgabe
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

Die Variablen aund bspeichern keine intWerte. Sie speichern Verweise auf Objekte. Deshalb ist es wichtig, sich daran zu erinnern, wie man sie richtig vergleicht:

Falsch Rechts
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}