CodeGym /Java-Blog /Random-DE /Wrapper-Klassen in Java
Autor
Aditi Nawghare
Software Engineer at Siemens

Wrapper-Klassen in Java

Veröffentlicht in der Gruppe Random-DE
Hallo! Sie sind mit primitiven Typen bereits gut vertraut und haben viel damit gearbeitet. In der Programmierung (und insbesondere in Java) haben Primitive viele Vorteile: Sie verbrauchen wenig Speicher (und machen das Programm dadurch effizienter) und verfügen über einen klar abgegrenzten Wertebereich. Allerdings haben wir beim Erlernen von Java bereits oft das Mantra „Alles in Java ist ein Objekt“ wiederholt. Aber Primitive widersprechen diesen Worten direkt. Sie sind keine Objekte. Ist unser Grundsatz „Alles ist ein Objekt“ falsch? Eigentlich ist es das nicht. In Java hat jeder primitive Typ einen Zwillingsbruder, eine Wrapper-Klasse.

Was ist eine Wrapper-Klasse?

Ein Wrapper ist eine spezielle Klasse, die ein Grundelement intern speichert. Da es sich jedoch um eine Klasse handelt, können Sie Instanzen davon erstellen. Sie speichern die Grundwerte intern, sind aber dennoch reale Objekte. Die Namen der Wrapper-Klassen sind den Namen der entsprechenden Grundelemente sehr ähnlich (oder genau gleich). Daher sind sie leicht zu merken.
Wrapper-Klassen für primitive Datentypen
Primitive Datentypen Wrapper-Klassen
int Ganze Zahl
kurz Kurz
lang Lang
Byte Byte
schweben Schweben
doppelt Doppelt
verkohlen Charakter
Boolescher Wert Boolescher Wert
Wrapper-Objekte werden auf die gleiche Weise wie jedes andere Objekt erstellt:

public static void main(String[] args) {

   Integer i = new Integer(682);
  
   Double d = new Double(2.33);
  
   Boolean b = new Boolean(false);
}
Mit Wrapper-Klassen können wir die Mängel primitiver Typen abmildern. Das offensichtlichste ist, dass Grundelemente keine Methoden haben. Sie verfügen beispielsweise nicht über eine toString()- Methode, sodass Sie beispielsweise kein int in einen String konvertieren können . Aber die Integer- Wrapper-Klasse macht dies einfach.

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
Allerdings kann die Konvertierung in die andere Richtung schwieriger sein. Nehmen wir an, wir haben einen String , von dem wir sicher wissen, dass er eine Zahl enthält. Unabhängig davon gibt es keine native Möglichkeit, mit einem primitiven int die Zahl aus dem String zu extrahieren und in eine Zahl umzuwandeln. Aber mit den Wrapper-Klassen ist das möglich.

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Ausgang:
1166628
Wir haben erfolgreich eine Zahl aus dem String extrahiert und sie der Integer- Referenzvariablen i zugewiesen . Übrigens, was die Referenzen angeht. Sie wissen bereits, dass Argumente auf unterschiedliche Weise an Methoden übergeben werden: Grundelemente nach Wert und Objekte nach Referenz. Sie können dieses Wissen nutzen, wenn Sie Ihre eigenen Methoden erstellen: Wenn Ihre Methode beispielsweise Bruchzahlen verwendet, Sie aber Logik für die Referenzübergabe benötigen, können Sie Double / Float -Argumente anstelle von double / float an die Methode übergeben . Zusätzlich zu den Methoden der Wrapper-Klassen können auch deren statische Felder sehr praktisch sein. Stellen Sie sich zum Beispiel vor, Sie haben die folgende Aufgabe: das maximal mögliche anzuzeigenint- Wert, gefolgt vom minimal möglichen Wert. Dieses Problem scheint eher grundlegend zu sein. Aber ohne Google ist es unwahrscheinlich, dass Sie es schaffen könnten. Mit Wrappern können Sie jedoch solche „alltäglichen Aufgaben“ problemlos bewältigen:

public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Diese Felder verhindern, dass Sie von ernsteren Aufgaben abgelenkt werden. Ganz zu schweigen von der Tatsache, dass die Eingabe von 2147483647 (was zufällig der Wert von MAX_VALUE ist) keine Kleinigkeit ist! :) Darüber hinaus haben wir in einer früheren Lektion darauf hingewiesen, dass Wrapper-Objekte unveränderlich sind.

public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
Ausgang:
0
Der Zustand des Objekts, auf das a ursprünglich zeigte , hat sich nicht geändert (da sich auch der Wert von b geändert hätte). Wie bei String s wird, anstatt den Zustand des Wrapper-Objekts zu ändern, ein völlig neues Objekt im Speicher erstellt. Warum haben sich die Entwickler von Java letztendlich dazu entschieden, primitive Typen in der Sprache zu belassen? Da alles ein Objekt sein sollte und wir Wrapper-Klassen haben, die alles ausdrücken können, was Primitive ausdrücken, warum behalten wir dann nicht einfach die Wrapper in der Sprache bei und entfernen die Primitive? Die Antwort ist einfach: Leistung. Primitive Typen werden primitiv genannt, weil ihnen viele der „schwergewichtigen“ Merkmale von Objekten fehlen. Ja, Objekte verfügen über viele praktische Methoden, aber Sie benötigen sie nicht immer. Manchmal brauchen Sie nur die Zahl 33 oder 2,62 oder true / false . In Situationen, in denen die Vorteile von Objekten keine Rolle spielen und für die Funktion des Programms nicht erforderlich sind, sind Primitive für die Aufgabe weitaus besser geeignet.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION