Introduksjon til autoboxing og unboxing i Java

Autoboxing er den automatiske konverteringen som Java-kompilatoren gjør mellom de primitive typene og deres tilhørende objektomslagsklasser, dvs. konvertering fra int til heltall, dobbelt til dobbelt osv. Unboxing er den automatiske konverteringen fra innpakningsklasseobjekter til deres tilsvarende primitiver, dvs. heltall til int osv. Denne funksjonen ble introdusert i versjon 1.5 av java, autoboxing og unboxing som er automatiske prosesser som håndteres av JRE, det viktigste punktet her blir å skrive riktig kode, som ikke legger til overdreven unødvendige objekter i bildet.

La oss nå diskutere hvordan Autoboxing og Unboxing i Java går internt -

  • Compiler bruker valueOf () -metoden for å konvertere primitiver til tilsvarende innpakningsobjekter (dvs. autoboksing) internt, i motsatt tilfelle bruker den intValue (), doubleValue () etc. som paradigmer for unboxing.
  • Som referanse er kartleggingen av innpakningen og primitivene i java nevnt nedenfor -
Primitiv typeInnpakningsklasse
booleanboolean
bytebyte
røyeKarakter
flyteFlyte
intInteger
langLang
kortKort
dobbeltDobbelt

Eksempler -

  • La oss ta en ArrayList of Heeltall nå og deretter bruke unboxing-konseptet -

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

  • Derfor, i eksemplet ovenfor, mens vi legger til verdi til x, ser vi at x ser ut til å være en primitiv, så unboxing skjer her automatisk mens denne oppgaven er utført.

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

  • Rett over har vi vist et eksempel -2 i denne sammenhengen, der et typisk scenario har blitt presentert. Hvis du er kjent med objektskaping i java, kan du se at "Heltall sum = 0", erklærer et objekt, og når vi gjør beregning i for-loopen, kan vi se at den primitive verdien "i" blir lagt til innpakningen " sum".
  • Dermed kan man oppdage at først konvertering fra innpakning til primitiv vil skje, ettersom “+” -operatør bare fungerer på primitiver, og derav vil objektsboksing først skje, deretter vil beregningen skje, deretter vil objekts autoboksing skje igjen og deretter verdien vil bli tilordnet variabelen "sum".
  • Dette gir unødvendig overhead på JVM ettersom mange mellomliggende heltall-objekter vil bli opprettet og vil bli ødelagt (for senere å bli samlet søppel), og derved kan bremse opp, så slike logikker skal håndteres med omhu.
  • La oss se nå forhold som er forskjellige fra generelle oppfatninger og vil ha noen kode der autoboksing og unboxing blir veldig viktig å bli forstått -

Tenk på utdraget som er plassert nedenfor, hva tror du blir resultatet av dette?

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

  • Hvis du sier "sant", er du "usant" fordi utdataene også er "usanne", det er fordi vi kan sammenligne heltallsområdet fra -128 til 127 som dette, for verdier som går ut av dette området de skal være unboxed.
  • Derfor må vi sammenligne intValue () av ​​de ovennevnte heltallene. For nå gjør kompilatoren dette ved å bruke valueOf () -egenskapen.
  • Hvis dette faller i området som er nevnt ovenfor, vil sannsynligvis koden ovenfor som den er gitt, da den først vil referere til heltalets bokstavelige pool for sammenligning.

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

Dette vil evalueres til "ekte" verdi, ettersom 100 er til stede i det bokstavelige bassenget.

Autoboksing og Unboxing i Java med overbelastning av metoder

  • Før vi tagger autoboksing og unboxing til metodebelastning, antas det at leseren er kjent med begrepet metodebelastning, vi vil bare gi liten innsikt og for mer, vennligst se Orakles dokumentasjon om det samme.
  • Overbelastning av metoder er en prosess der samme metodenavn blir brukt med et annet antall inndatargumenter, forskjellige datatyper av variabler med de samme navnene osv., Som brukes til å presentere flere varianter av en hvilken som helst beregningsmetode generelt.
  • La oss ta et eksempel for det samme for å forstå det dypere, og vi vil også presentere utdataene som vises på bildet denne gangen -

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

Utgang -

skrive ut den ikke-boksede verdien 5
skrive ut den autoboksede verdien 5

Merk - du kan utføre programmet ovenfor i hvilken som helst av IDE-ene for å ha den ovenfor plasserte utdata.

  • Følgelig forteller ovennevnte oppførsel tydelig at autoboxing-teknikken har betydelig bruk i overbelastningskonsepter, og den skal brukes med forsiktighet under koding.

Fordeler med autoboxing og unboxing i Java-

  • Den riktige konverteringen gjøres automatisk av kompilatoren.
  • Utvikleren skal skrive mindre kode og derved renere kode.
  • Ingen behov for manuelle type-casting uttrykk.

Konklusjon

Vi så bruk-saken om autoboxing og unboxing, hvor implisitt dette konseptet er og hvor det kan skape fordeler og ulemper. Det må brukes med forsiktighet under koding, ellers kan det legge til unødvendige beregningsmessige omregningskostnader. Derfor skal konverteringer gjøres i primitivene for å unngå overdreven søppelinnsamling og overdreven midlertidig gjenstand av objekter. Vi så også bruken av autoboksing med overbelastningskonseptet java, du kan sjekke noen flere begrensninger sammen med dette.

Anbefalte artikler

Dette har vært en guide til autoboksing og unboxing i Java. Her diskuterer vi også Hva er autoboxing og unboxing i java? hvordan fungerer det internt med noen utvalgskoder? Du kan også gå gjennom andre foreslåtte artikler for å lære mer -

  1. Hva er JDBC?
  2. Hva er Generics i Java?
  3. Groovy vs Java
  4. Hva er Java arv?
  5. Eksempler og hvordan generikker fungerer i C #
  6. JRE vs JVM | Topp 8 forskjeller med (Infographics)