Introductie tot Autoboxing en Unboxing in Java

Autoboxing is de automatische conversie die de Java-compiler maakt tussen de primitieve typen en hun overeenkomstige objectwikkelklassen, dat wil zeggen conversie van int naar Integer, dubbel naar Double, etc. Unboxing is de automatische conversie van wrapper-klasseobjecten naar hun equivalente primitieven ie Integer naar int enz. Deze functie is geïntroduceerd in versie 1.5 van Java, autoboxing en unboxing, net als automatische processen die door JRE worden afgehandeld, het belangrijkste punt hier is om de juiste code te schrijven, die geen buitensporige onnodige objecten aan de afbeelding toevoegt.

Laten we nu bespreken hoe Autoboxing en Unboxing in Java intern gaat -

  • Compiler gebruikt de methode valueOf () om primitieven intern naar overeenkomstige wrapper-objecten (dwz autoboxing) te converteren, in het omgekeerde geval gebruikt het intValue (), doubleValue () enz. Zoals paradigma's voor unboxing.
  • Ter referentie worden de wrapper en primitieven in Java hieronder vermeld -
Primitief typeWrapper-klasse
booleanBoolean
byteByte
verkolenKarakter
vlotterVlotter
intGeheel getal
langLang
kortkort
dubbeleDubbele

Voorbeelden

  • Laten we nu een ArrayList van gehele getallen nemen en dan gebruik maken van het unboxing-concept -

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);
)
)

  • Daarom zien we in het bovenstaande voorbeeld, terwijl we waarde aan x toevoegen, dat x een primitief lijkt te zijn, dus unboxing gebeurt hier automatisch terwijl deze toewijzing wordt uitgevoerd.

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);
)
)

  • Net hierboven hebben we in dit verband een voorbeeld -2 laten zien, waarin een typisch scenario is gepresenteerd. Als u bekend bent met het maken van objecten in Java, kunt u zien dat "Integer sum = 0", een object declareert, en wanneer we binnen de for-lus rekenen, kunnen we zien dat de primitieve waarde "i" wordt toegevoegd aan wrapper " som".
  • Daarom kan men vinden dat eerst conversie van wrapper naar primitief zal plaatsvinden, aangezien de operator "+" alleen op primitieven werkt, en daarom zal object unboxing eerst gebeuren, dan zal de berekening plaatsvinden, dan zal object autoboxing weer terugkomen en dan de waarde worden toegewezen aan de variabele "som".
  • Dit levert onnodige overhead op de JVM op omdat veel tussenliggende Integer-objecten worden gemaakt en zullen worden vernietigd (om later afval te verzamelen), waardoor vertraging kan optreden, dus dergelijke logica's moeten voorzichtig worden behandeld.
  • Laten we nu eens kijken naar omstandigheden die anders zijn dan algemene percepties en hebben een code waarin autoboxing en unboxing erg belangrijk worden om te worden begrepen -

Overweeg het onderstaande fragment, wat is volgens u de output hiervan?

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

  • Als u "waar" zegt, dan bent u "onwaar" omdat de uitvoer ook "onwaar" is, omdat we alleen het gehele getalbereik van -128 tot 127 als volgt kunnen vergelijken, voor waarden die buiten dit bereik vallen, moeten ze zijn unboxed.
  • Daarom moeten we intValue () van de bovenstaande gehele getallen vergelijken, voor nu doet de compiler dit met behulp van de eigenschap valueOf ().
  • Waarschijnlijk zal, als dit binnen het hierboven genoemde bereik valt, de bovenstaande code zoals deze is waar zijn, omdat deze eerst ter vergelijking naar de gehele getallenpool verwijst.

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

Dit zal worden geëvalueerd naar de "echte" waarde, omdat 100 aanwezig is in de letterlijke pool.

Autoboxing en Unboxing in Java met methode-overbelasting

  • Voordat we autoboxen en unboxing taggen naar methode-overbelasting, wordt ervan uitgegaan dat de lezer bekend is met het concept van methode-overbelasting, we zullen slechts weinig inzichten geven en voor meer informatie verwijzen we naar de documentatie van Oracle hierover.
  • Methode-overbelasting is een proces waarbij dezelfde methode-naam wordt gebruikt met een ander aantal invoerargumenten, verschillende gegevenstypen van variabelen met dezelfde namen, enz., Gebruiken om in het algemeen meerdere varianten van elke berekeningsmethode te presenteren.
  • Laten we een voorbeeld nemen voor hetzelfde om het dieper te begrijpen en we zullen ook de uitvoer presenteren die deze keer in de afbeelding verschijnt -

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);
)
)

Uitgang -

de waarde zonder doos afdrukken 5
de autobox-waarde afdrukken 5

Opmerking - u kunt het bovenstaande programma in elk van de IDE's uitvoeren om de hierboven geplaatste uitvoer te hebben.

  • Vandaar dat het bovenstaande gedrag duidelijk aangeeft dat de autoboxingtechniek veel gebruik heeft in overbelastingsconcepten en dat deze met zorg moet worden gebruikt tijdens het coderen.

Voordelen van Autoboxing en Unboxing in Java-

  • De juiste conversie wordt automatisch gedaan door de compiler.
  • De ontwikkelaar wordt verondersteld mindere code te schrijven en daarmee schonere code.
  • Handmatige typegietuitdrukkingen zijn niet nodig.

Conclusie

We zagen de use-case van autoboxing en unboxing, hoe impliciet dit concept is en waar het voor- en nadelen kan creëren. Het moet met voorzichtigheid worden gebruikt tijdens het coderen, anders kan het de overhead van onnodige rekenconversies optellen, daarom moeten conversies worden uitgevoerd in de primitieven om overmatige afvalinzameling overhead en buitensporige tijdelijke objectcreatie te voorkomen. We zagen ook het gebruik van autoboxen met het overbelastingsconcept van Java, u kunt hier nog een paar beperkingen op controleren.

Aanbevolen artikelen

Dit is een gids geweest voor Autoboxing en Unboxing in Java. Hier bespreken we ook Wat is Autoboxing en Unboxing in Java? hoe werkt het intern met sommige voorbeeldcodes? U kunt ook onze andere voorgestelde artikelen doornemen voor meer informatie -

  1. Wat is JDBC?
  2. Wat is Generics in Java?
  3. Groovy versus Java
  4. Wat is Java-erfenis?
  5. Voorbeelden en hoe generieken werken in C #
  6. JRE vs JVM | Top 8 verschillen met (infographics)