Einführung in Autoboxing und Unboxing in Java

Autoboxing ist die automatische Konvertierung, die der Java-Compiler zwischen den primitiven Typen und ihren entsprechenden Objekt-Wrapper-Klassen vornimmt, dh die Konvertierung von int nach Integer, double nach Double usw. Unboxing ist die automatische Konvertierung von Wrapper-Klassenobjekten zu ihren äquivalenten Primitiven, dh Integer nach int etc. Diese Funktion wurde in Version 1.5 von Java eingeführt, Autoboxing und Unboxing, ebenso wie automatische Prozesse, die von JRE ausgeführt werden. Der wichtigste Punkt hier ist, richtigen Code zu schreiben, der keine unnötigen Objekte in das Bild einfügt.

Lassen Sie uns nun diskutieren, wie Autoboxing und Unboxing in Java intern ablaufen -

  • Der Compiler verwendet die valueOf () -Methode, um Primitive intern in entsprechende Wrapper-Objekte (dh Autoboxen) zu konvertieren, und verwendet umgekehrt intValue (), doubleValue () usw. wie Paradigmen zum Entpacken.
  • Zu Referenzzwecken wird das Mapping von Wrapper und Primitiven in Java im Folgenden erwähnt:
Primitiver TypWrapper-Klasse
Boolescher WertBoolean
ByteByte
verkohlenCharakter
schwebenSchweben
intGanze Zahl
langeLange
kurzKurz
doppeltDoppelt

Beispiele -

  • Nehmen wir jetzt eine ArrayList of Integers und nutzen dann das Unboxing-Konzept -

import java.util.ArrayList;
public class MyClass (
public static void main(String args()) (
ArrayList intlist = new ArrayList();
//wrapper Integer objects being added here
intlist.add(1);
interest.add(2);
//auto-unboxing is happening here
int x = intlist.get(0);
System.out.println(x);
)
)

  • Im obigen Beispiel sehen wir also, dass x ein Primitiv ist, während wir x einen Wert hinzufügen. Das Entpacken geschieht hier also automatisch, während diese Zuweisung erfolgt.

public class MyClass (
public static void main(String args()) (
Integer sum =0;
for(int i=0;i<10;i++)
(
sum = sum + i;
)
System.out.println(sum);
)
)

  • Oben haben wir ein Beispiel -2 in diesem Zusammenhang gezeigt, in dem ein typisches Szenario dargestellt wurde. Wenn Sie mit der Objekterstellung in Java vertraut sind, können Sie sehen, dass "Integer sum = 0" ein Objekt deklariert, und wenn wir innerhalb der for-Schleife rechnen, können wir sehen, dass dem Wrapper der Grundwert "i" hinzugefügt wird. Summe".
  • Man kann also feststellen, dass zuerst die Konvertierung von Wrapper zu Primitiv erfolgt, da der Operator "+" nur mit Primitiven arbeitet, und daher zuerst das Entpacken von Objekten erfolgt, dann die Berechnung erfolgt, dann das automatische Verschieben von Objekten erneut und dann der Wert wird der Variablen "sum" zugewiesen.
  • Dies bedeutet unnötigen Overhead für die JVM, da viele Integer-Zwischenobjekte erstellt und zerstört werden (um später den Müll zu sammeln). Dadurch kann eine Verlangsamung auftreten, weshalb solche Logik mit Vorsicht behandelt werden muss.
  • Lassen Sie uns nun Bedingungen sehen, die sich von den allgemeinen Vorstellungen unterscheiden, und einen Code haben, in dem Autoboxing und Unboxing sehr wichtig sind, um verstanden zu werden.

Betrachten Sie das unten stehende Snippet. Was wird Ihrer Meinung nach die Ausgabe davon sein?

public class Main
(
public static void main(String() args) (
Integer m = 34123;
Integer x = 34123;
System.out.println(x==m);
)
)

  • Wenn Sie "wahr" sagen, dann sind Sie "falsch", weil die Ausgabe auch "falsch" ist. Dies liegt daran, dass wir nur den ganzzahligen Bereich von -128 bis 127 auf Werte vergleichen können, die außerhalb dieses Bereichs liegen sollen ungepackt.
  • Daher müssen wir intValue () der obigen Ganzzahlen vergleichen, da der Compiler dies jetzt mit der valueOf () -Eigenschaft ausführt.
  • Wenn dies in den oben angegebenen Bereich fällt, ist der obige Code wahrscheinlich wahr, da er sich zum Vergleich zunächst auf den Ganzzahl-Literal-Pool bezieht.

public class Main
(
public static void main(String() args) (
Integer m = 100;
Integer x = 100;
System.out.println(x==m);
)
)

Dies wird als "wahr" ausgewertet, da 100 im Literal-Pool vorhanden ist.

Autoboxing und Unboxing in Java mit Methodenüberladung

  • Bevor wir Autoboxing und Unboxing mit Methodenüberladung markieren, wird davon ausgegangen, dass der Leser mit dem Konzept der Methodenüberladung vertraut ist. Wir geben nur kleine Einblicke, und für weitere Informationen lesen Sie bitte die Dokumentation von Oracle.
  • Das Überladen von Methoden ist ein Prozess, bei dem derselbe Methodenname mit einer unterschiedlichen Anzahl von Eingabeargumenten, unterschiedliche Datentypen von Variablen mit demselben Namen usw. verwendet wird, um im Allgemeinen mehrere Varianten einer Berechnungsmethode darzustellen.
  • Nehmen wir ein Beispiel, um es genauer zu verstehen. Wir werden auch die Ausgabe präsentieren, die dieses Mal auf dem Bild zu sehen ist.

public class Main
(
public static void main(String() args) (
Overload obj = new Overload();
int i =5;
obj.printval(5);
Integer m = i;
obj.printval(m);
)
)
class Overload
(
public void printval(int i)
(
System.out.println("printing the unboxed value "+ i);
)
public void printval(Integer i)
(
System.out.println("printing the autoboxed value "+ i);
)
)

Ausgabe -

Unboxed-Wert drucken 5
Drucken des Autobox-Werts 5

Hinweis - Sie können das obige Programm in jedem der IDEs ausführen, um die oben platzierte Ausgabe zu erhalten.

  • Das obige Verhalten zeigt daher deutlich, dass die Autoboxing-Technik in Überladungskonzepten eine erhebliche Bedeutung hat und beim Codieren mit Vorsicht angewendet werden sollte.

Vorteile von Autoboxing und Unboxing in Java-

  • Die entsprechende Konvertierung erfolgt automatisch durch den Compiler.
  • Der Entwickler soll weniger Code und damit saubereren Code schreiben.
  • Manuelle Typumwandlungsausdrücke sind nicht erforderlich.

Fazit

Wir haben den Anwendungsfall von Autoboxing und Unboxing gesehen, wie implizit dieses Konzept ist und wo es Vor- und Nachteile erzeugen kann. Es muss beim Codieren mit Vorsicht verwendet werden, da es sonst den Overhead für unnötige Computerkonvertierungen erhöhen kann. Daher müssen Konvertierungen in den Grundelementen durchgeführt werden, um übermäßigen Speicherbereinigungs-Overhead und übermäßige temporäre Objekterstellung zu vermeiden. Wir haben auch den Anwendungsfall des Autoboxens mit dem Überlastungskonzept von Java gesehen. Sie können damit ein paar weitere Einschränkungen überprüfen.

Empfohlene Artikel

Dies war eine Anleitung zum Autoboxen und Unboxen in Java. Hier diskutieren wir auch Was ist Autoboxing und Unboxing in Java? Wie funktioniert es intern mit einigen Beispielcodes? Sie können auch unsere anderen Artikelvorschläge durchgehen, um mehr zu erfahren -

  1. Was ist JDBC?
  2. Was ist Generics in Java?
  3. Groovy gegen Java
  4. Was ist Java-Vererbung?
  5. Beispiele und Funktionsweise von Generika in C #
  6. JRE vs JVM | Top 8 Unterschiede zu (Infografiken)