Introduktion til autoboxing og unboxing i Java

Autoboxing er den automatiske konvertering, som Java-kompilatoren foretager mellem de primitive typer og deres tilsvarende objektomslagsklasser, dvs. konvertering fra int til heltal, dobbelt til dobbelt osv. Unboxing er den automatiske konvertering fra indpakningsklasseobjekter til deres ækvivalente primitiver, dvs. heltal til int osv. Denne funktion blev introduceret i version 1.5 af java, autoboxing og unboxing, som også er automatiske processer, der håndteres af JRE, det vigtigste punkt her bliver at skrive ordentlig kode, der ikke tilføjer overdrevne unødvendige objekter på billedet.

Lad os nu diskutere, hvordan Autoboxing og Unboxing i Java går internt -

  • Compiler bruger metoden ValueOf () til at konvertere primitiver til tilsvarende indpakningsobjekter (dvs. autoboxing) internt, i vice versa bruger den intValue (), doubleValue () osv. Som paradigmer til unboxing.
  • Som reference nævnes indpakning af indpakning og primitiver i java nedenfor -
Primitiv typeIndpakningsklasse
booleanBoolean
byteByte
charKarakter
flydeFlyde
intHeltal
langLang
kortKort
dobbeltDobbelt

Eksempler -

  • Lad os tage en ArrayList of Heiltal nu og derefter gøre brug af unboxing-konceptet -

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

  • I ovenstående eksempel, mens vi tilføjer værdi til x, ser vi, at x ser ud til at være en primitiv, så unboxing sker her automatisk, mens denne tildeling udføres.

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

  • Lige ovenfor har vi vist et eksempel -2 i denne sammenhæng, hvor et typisk scenario er blevet præsenteret. Hvis du er bekendt med objektskabelse i java, kan du se, at "Heltal sum = 0", erklærer et objekt, og når vi foretager beregning inde i for-loopen, kan vi se, at den primitive værdi "i" tilføjes indpakningen " sum".
  • Derfor kan man konstatere, at først konvertering fra indpakning til primitiv vil finde sted, da “+” -operatør kun fungerer på primitiver, og dermed vil objekt-afboksning først ske, derefter vil beregningen finde sted, derefter vil objekts autoboxing ske igen og derefter værdien tildeles variablen “sum”.
  • Dette giver unødvendig overhead på JVM, da mange mellemliggende heltal-objekter vil blive oprettet og vil blive ødelagt (for senere at blive opsamlet affald), hvorved der kan bremses langsommere, så sådanne logikker skal håndteres med omhu.
  • Lad os se nu forhold, der adskiller sig fra generelle opfattelser og vil have en vis kode, hvor autoboxing og unboxing bliver meget vigtigt at blive forstået -

Overvej uddraget, der er placeret nedenfor, hvad tror du, det vil være resultatet af dette?

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

  • Hvis du siger "sandt", er du "falsk", fordi output også er "falskt", det er fordi vi kun kan sammenligne heltalområdet fra -128 til 127 som dette, for værdier, der går ud af dette interval, skal de være unboxed.
  • Derfor er vi nødt til at sammenligne intValue () af ovennævnte heltal, for nu gør compileren dette gjort ved hjælp af egenskaben valueOf ().
  • Hvis dette falder inden for det citerede interval, vil den ovenstående kode, som den er, give sandhed, da den først vil henvise til det heltallige bogstavelige pulje til sammenligning.

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

Dette evalueres til ”ægte” værdi, da 100 er til stede i den bogstavelige pool.

Autoboxing og Unboxing i Java med metodeoverbelastning

  • Før vi mærker autoboxing og unboxing til metodeoverbelastning, antages det, at læseren er bekendt med begrebet metodebelastning, vi vil bare give lidt indsigt og for mere henvises til Oracle's dokumentation om det samme.
  • Metodeoverbelastning er en proces, hvor det samme metodenavn bruges med et andet antal input-argumenter, forskellige datatyper af variabler med de samme navne osv., Der bruges til at præsentere flere varianter af en hvilken som helst beregningsmetode generelt.
  • Lad os tage et eksempel til det samme for at forstå det dybere, og vi vil også præsentere det output, der vises på billedet denne gang -

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

Output -

udskrivning af den unboxed-værdi 5
udskrivning af den autoboxede værdi 5

Bemærk - du kan udføre ovenstående program i en hvilken som helst af IDE'erne for at få den ovenstående placerede output.

  • Derfor fortæller ovenstående adfærd tydeligt, at autoboxing-teknikken har betydelig anvendelse i overbelastningskoncepter, og den skal bruges med omhu under kodning.

Fordele ved autoboxing og unboxing i Java-

  • Den passende konvertering udføres automatisk af kompilatoren.
  • Udvikleren skal skrive mindre kode og dermed renere kode.
  • Intet behov for manuelle type-casting-udtryk.

Konklusion

Vi så brugen af ​​autoboxing og unboxing, hvor implicit dette koncept er, og hvor det kan skabe fordele og ulemper. Det skal bruges med omhu under kodning, ellers kan det tilføje unødvendige beregningsmæssige konverteringsomkostninger, og derfor skal der foretages konverteringer i primitiverne for at undgå overdreven affaldsopsamlingsomkostninger og overdreven midlertidig objektskabelse. Vi så også brugen af ​​autoboxing med overbelastningskonceptet java, du kan tjekke et par flere begrænsninger sammen med dette.

Anbefalede artikler

Dette har været en guide til autoboxing og unboxing i Java. Her diskuterer vi også Hvad er Autoboxing og Unboxing i java? hvordan fungerer det internt med nogle prøvekoder? Du kan også gennemgå vores andre foreslåede artikler for at lære mere -

  1. Hvad er JDBC?
  2. Hvad er Generics i Java?
  3. Groovy vs Java
  4. Hvad er Java-arv?
  5. Eksempler og hvordan generics fungerer i C #
  6. JRE vs JVM | Top 8 forskelle med (Infographics)

Kategori: