Introduktion till autoboxing och unboxing i Java

Autoboxing är den automatiska omvandlingen som Java-kompilatorn gör mellan de primitiva typerna och deras motsvarande objektomslagsklasser, dvs. konvertering från int till heltal, dubbel till dubbel osv. Unboxing är den automatiska omvandlingen från omslagsklassobjekt till deras motsvarande primitiv, dvs heltal till int etc. Den här funktionen introducerades i version 1.5 av java, autoboxing och unboxing som är automatiska processer som hanteras av JRE, den viktigaste punkten här blir att skriva korrekt kod, som inte lägger till alltför onödiga objekt i bilden.

Låt oss nu diskutera hur Autoboxing och Unboxing i Java går internt -

  • Compiler använder metoden valueOf () för att konvertera primitiv till motsvarande omslagobjekt (dvs autoboxing) internt, i vice versa använder den intValue (), doubleValue () etc. som paradigmer för unboxing.
  • Som referens nämns kartläggningen av omslaget och primitiven i java nedan -
Primitiv typOmslagsklass
booleanBoolean
bitgruppbyte
rödingKaraktär
flytaFlyta
intHeltal
långLång
kortKort
dubbel-Dubbel

Exempel -

  • Låt oss ta en ArrayList of Heiltal nu och sedan använda 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);
)
)

  • Därför, i exemplet ovan, medan vi lägger till värde till x, ser vi att x verkar vara en primitiv, så att unboxing händer här automatiskt medan denna tilldelning är klar.

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

  • Precis ovan har vi visat ett exempel -2 i detta sammanhang, där ett typiskt scenario har presenterats. Om du är bekant med objektskapning i java kan du se att "Heltalssumma = 0", förklarar ett objekt, och när vi gör beräkning inuti for-loopen kan vi se att det primitiva värdet "i" läggs till omslaget " summa".
  • Därför kan man upptäcka att först konvertering från omslag till primitiv kommer att ske, eftersom "+" -operatören bara fungerar på primitiv, och följaktligen kommer objektsoboxning att ske först, därefter kommer beräkningen att ske, sedan kommer objekts autoboxing att återgå igen och sedan värdet kommer att tilldelas variabeln "summa".
  • Detta ger onödiga omkostnader på JVM eftersom många mellanliggande heltalsobjekt skapas och kommer att förstöras (för att senare samlas in sopor), vilket därmed kan sakta ner, så sådana logiker ska hanteras med försiktighet.
  • Låt oss nu se förhållanden som skiljer sig från allmänna uppfattningar och kommer att ha någon kod där autoboxing och unboxing blir mycket viktigt att förstås -

Tänk på utdraget placerat nedan, vad tror du kommer att bli resultatet av detta?

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

  • Om du säger "sant" så är du "falsk" eftersom utmatningen också är "falsk", det beror på att vi kan jämföra heltalsintervallet från -128 till 127 som detta, för värden som går ut ur detta intervall ska de vara unboxed.
  • Därför måste vi jämföra intValue () för ovanstående heltal, för nu gör kompilatorn detta med egenskapen valueOf ().
  • Om detta faller inom det citerade området ovan kommer koden ovan som den är sannolik, eftersom den först kommer att hänvisa till heltalets bokstavliga pool för jämförelse.

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

Detta kommer att utvärderas till ”verkligt” värde, eftersom 100 finns i den bokstavliga poolen.

Autoboxing och Unboxing i Java med överbelastning av metoder

  • Innan vi taggar autoboxing och unboxing till metodöverbelastning antas det att läsaren känner till begreppet metodöverbelastning, vi kommer bara att ge lite insikter och för mer, se Oracle's dokumentation om detsamma.
  • Metodöverbelastning är en process där samma metodnamn används med ett annat antal inmatningsargument, olika datatyper av variabler med samma namn etc., för att presentera flera varianter av vilken beräkningsmetod som helst.
  • Låt oss ta ett exempel för samma för att förstå det djupare och vi kommer också att presentera den utgång som visas på bilden den här gången -

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

Utgång -

skriva ut det oboxade värdet 5
skriva ut det autoboxade värdet 5

Obs - du kan köra ovanstående program i någon av IDE: erna för att få ovanstående placering.

  • Därför säger ovanstående beteende tydligt att autoboxningstekniken har betydande användning vid överbelastningskoncept och att den ska användas med försiktighet under kodning.

Fördelar med autoboxing och unboxing i Java-

  • Lämplig konvertering görs automatiskt av kompilatorn.
  • Utvecklaren ska skriva mindre kod och därmed renare kod.
  • Inget behov av manuella typgjutningsuttryck.

Slutsats

Vi såg användningen av autoboxing och unboxing, hur implicit detta koncept är och var det kan skapa för- och nackdelar. Det måste användas med försiktighet under kodning, annars kan det lägga till onödiga beräkningskostnader omkostnader, följaktligen omvandlingar ska göras i primitiven för att undvika överdrivet skräp uppsamlingsomkostnader och överdrivet tillfälligt objekt skapande. Vi såg också användningen av autoboxning med överbelastningskonceptet java, du kan kontrollera några ytterligare begränsningar tillsammans med detta.

Rekommenderade artiklar

Detta har varit en guide till Autoboxing och Unboxing i Java. Här diskuterar vi också Vad är Autoboxing och Unboxing i java? hur fungerar det internt med vissa exempelkoder? Du kan också gå igenom våra andra föreslagna artiklar för att lära dig mer -

  1. Vad är JDBC?
  2. Vad är Generics i Java?
  3. Groovy vs Java
  4. Vad är Java-arv?
  5. Exempel och hur generiker fungerar i C #
  6. JRE vs JVM | Topp 8 skillnader med (Infographics)

Kategori: