Wrapper-Klassen in Java
1. Überblick
Wie der Name schon sagt,wrapper classes are objects encapsulating primitive Java types.
Jedes Java-Primitiv hat einen entsprechenden Wrapper:
-
Boolescher Wert, Byte, Short, Char, Int, Long, Float, Double
-
Boolean, Byte, Short, Character, Integer, Long, Float, Doppelt
Diese sind alle im Paketjava.langdefiniert, daher müssen wir sie nicht manuell importieren.
2. Wrapper-Klassen
„Was ist der Zweck einer Wrapper-Klasse?“ Es ist eines dercommon Java interview questions.
Grundsätzlichgeneric classes only work with objects and don’t support primitives. Wenn wir mit ihnen arbeiten möchten, müssen wir daher primitive Werte in Wrapper-Objekte konvertieren.
Beispielsweise arbeitet das Java Collection Framework ausschließlich mit Objekten. Vor langer Zeit, als (vor Java 5, vor fast 15 Jahren) kein Autoboxing vorhanden war und wir beispielsweise nicht einfachadd(5) für eine Sammlung vonIntegers. aufrufen konnten
Zu diesem Zeitpunkt sind dieseprimitive values needed to be manually converted to corresponding wrapper classes und in Sammlungen gespeichert.
Heute können wir mit Autoboxing problemlosArrayList.add(101) ausführen, aber intern konvertiert Java den primitiven Wert inInteger, bevor es mit dervalueOf()-Methode.inArrayList gespeichert wird. s
3. Primitive to Wrapper-Klassenkonvertierung
Die große Frage lautet nun: Wie konvertieren wir einen primitiven Wert in eine entsprechende Wrapper-Klasse, z. einint bisInteger oder einchar bisCharacter?
Nun,we can either use constructor or static factory methods to convert a primitive value to an object einer Wrapper-Klasse.
Sehen wir uns ein Beispiel für die Konvertierung einesint-Werts in einInteger-Objekt in Java an:
Integer object = new Integer(1);
Integer anotherObject = Integer.valueOf(1);
Die MethodevalueOf() gibt eine Instanz zurück, die den angegebenen Wert vonintdarstellt.
Es gibt zwischengespeicherte Werte zurück, was es effizient macht. Es werden immer Werte zwischen -128 und 127 zwischengespeichert, es können jedoch auch andere Werte außerhalb dieses Bereichs zwischengespeichert werden.
In ähnlicher Weise können wir auchboolean inBoolean, byte inByte, char inCharacter, long inLong, float inFloat, unddouble inDouble. Wenn wirconvert String to Integer haben, müssen wir die MethodeparseInt() verwenden, daString keine Wrapper-Klasse ist.
Andererseits sindto convert from a wrapper object to a primitive value, we can use the corresponding method such as intValue(), doubleValue() usw.:
int val = object.intValue();
Eine umfassende Referenz finden Sie inhere.
4. Autoboxing und Unboxing
Im vorherigen Abschnitt haben wir gezeigt, wie man einen primitiven Wert manuell in ein Objekt konvertiert.
Nach Java 5this conversion can be done automatically by using features called autoboxing and unboxing.
“Boxing” refers to converting a primitive value into a corresponding wrapper object. Da dies automatisch geschehen kann, wird dies als Autoboxing bezeichnet.
In ähnlicher Weise istwhen a wrapper object is unwrapped into a primitive value then this is known as unboxing.
In der Praxis bedeutet dies, dass wir einen primitiven Wert an eine Methode übergeben können, die ein Wrapper-Objekt erwartet, oder einer Variablen, die ein Objekt erwartet, ein Grundelement zuweisen:
List list = new ArrayList<>();
list.add(1); // autoboxing
Integer val = 2; // autoboxing
In diesem Beispiel konvertiert Java automatisch den Wert des Grundelementsintin den Wrapper.
Intern wird dievalueOf()-Methode verwendet, um die Konvertierung zu erleichtern. Beispielsweise sind die folgenden Zeilen äquivalent:
Integer value = 3;
Integer value = Integer.valueOf(3);
Obwohl dies die Konvertierung erleichtert und Codes besser lesbar macht, gibt es einige Fälle, in denenwe shouldn’t use autoboxing e.g. inside a loop.
Ähnlich wie beim Autoboxen erfolgt das Entpacken automatisch, wenn ein Objekt an eine Methode übergeben wird, die ein Grundelement erwartet, oder wenn es einer Grundelementvariablen zugewiesen wird:
Integer object = new Integer(1);
int val1 = getSquareValue(object); //unboxing
int val2 = object; //unboxing
public static int getSquareValue(int i) {
return i*i;
}
Grundsätzlich sorgtif we write a method that accepts a primitive value or wrapper object, we can still pass both values to them. Java dafür, dass der richtige Typ übergeben wird, z. Primitiv oder Wrapper je nach Kontext.
5. Fazit
In diesem kurzen Tutorial haben wir uns mit Wrapper-Klassen in Java sowie dem Mechanismus des Autoboxing und Unboxing befasst.