CodeGym/Java-Blog/Random-DE/Autoboxing und Unboxing in Java
John Squirrels
Level 41
San Francisco

Autoboxing und Unboxing in Java

Veröffentlicht in der Gruppe Random-DE
In Java ist das Autoboxing/Unboxing eine Funktion von Primitiven und ihren Wrappern. Schauen wir uns dieses Konzept genauer an. Wie wir bereits gelernt haben, ist Java eine objektorientierte Sprache. Das bedeutet, dass alle in Java geschriebenen Programme aus Objekten bestehen. Primitive sind keine Objekte. Aber trotzdem kann einer Wrapper-Variablen ein primitiver Wert zugewiesen werden. Dieser Vorgang wird Autoboxing genannt. Ebenso kann einer primitiven Variablen ein Wrapper-Objekt zugewiesen werden. Dieser Vorgang wird Unboxing genannt. Zum Beispiel:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // Unboxing
       y = x * 123; // Autoboxing
   }
}
In Zeile 5 weisen wir dem Grundelement x y zu, das ein Integer- Objekt ist . Wie Sie sehen, müssen wir keine weiteren Schritte unternehmen: Der Compiler weiß, dass int und Integer im Wesentlichen dasselbe sind. Das ist Unboxing. Etwas Ähnliches passiert mit Autoboxing in Zeile 6: Der Grundwert (x * 123) lässt sich leicht dem Objekt y zuweisen . Dies ist ein Beispiel für Autoboxing. Aus diesem Grund enthält der Begriff das Wort „auto“: weil Sie nichts Besonderes tun müssen, um Grundelemente den entsprechenden Wrapper-Objekten zuzuweisen (und umgekehrt). Es geschieht alles automatisch. Praktisch, oder? :) Wir sehen ein weiteres Beispiel für die Bequemlichkeit des Autoboxings/Unboxings bei der Arbeit mit Methoden. Dies liegt daran, dass Methodenargumente ebenfalls automatisch verpackt und entpackt werden. Wenn eine Methode beispielsweise zwei Integer- Objekte als Eingaben akzeptiert, können wir stattdessen problemlos normale int s übergeben !
public class Main {
   public static void main(String[] args) {

       printNumber(7);// A standard int, not even an int variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered the number " + i);
   }
}
Ausgabe:
You entered the number 7
Es funktioniert auch in die andere Richtung:
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered the number " + i);
   }
}
Ein wichtiger Punkt, den Sie beachten müssen, ist dieser: Autoboxing und Unboxing funktionieren nicht für Arrays!
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);// Error, this won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
Der Versuch, ein Array von Grundelementen an eine Methode zu übergeben, die ein Array von Objekten akzeptiert, führt zu einem Kompilierungsfehler. Lassen Sie uns abschließend noch einmal kurz Primitive und Wrapper vergleichen.

Primitive:

  • Leistungsvorteile haben
Wrapper:
  • Erlauben Sie uns, das Prinzip „Alles ist ein Objekt“ nicht zu verletzen, was bedeutet, dass Zahlen, Zeichen und boolesche Werte nicht gegen dieses Konzept verstoßen
  • Erweitern Sie die Möglichkeiten zum Arbeiten mit diesen Werten, indem Sie praktische Methoden und Felder bereitstellen
  • Sind notwendig, wenn eine Methode nur mit Objekten funktioniert
Um das Gelernte zu vertiefen, empfehlen wir Ihnen, sich eine Videolektion aus unserem Java-Kurs anzusehen
Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare