Introduzione a Autoboxing e Unboxing in Java

Autoboxing è la conversione automatica che il compilatore Java effettua tra i tipi primitivi e le corrispondenti classi wrapper di oggetti, ovvero la conversione da int a Integer, double in Double, ecc. Unboxing è la conversione automatica dagli oggetti della classe wrapper ai loro primitivi equivalenti, cioè Integer in int ecc. Questa funzione è stata introdotta nella versione 1.5 di java, autoboxing e unboxing così come i processi automatici gestiti da JRE, il punto più importante qui arriva a scrivere il codice corretto, che non aggiunge oggetti inutili eccessivi nella foto.

Ora parliamo di come Autoboxing e Unboxing in Java vanno internamente -

  • Il compilatore utilizza il metodo valueOf () per convertire le primitive in corrispondenti oggetti wrapper (ovvero autoboxing) internamente, nel caso contrario utilizza intValue (), doubleValue () ecc. Come paradigmi per unboxing.
  • Per riferimento, la mappatura di wrapper e primitive in java è menzionata di seguito -
Tipo primitivoClasse wrapper
booleanobooleano
byteByte
carbonizzarePersonaggio
galleggianteGalleggiante
intNumero intero
lungoLungo
cortoCorto
DoppioDoppio

Esempi -

  • Facciamo un ArrayList of Integers ora e poi usiamo il concetto di unboxing -

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

  • Quindi, nell'esempio sopra, mentre aggiungiamo valore a x, vediamo che x sembra essere una primitiva, quindi unboxing avviene qui automaticamente mentre questo compito viene svolto.

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

  • Appena sopra abbiamo mostrato un esempio -2 in questo contesto, in cui è stato presentato uno scenario tipico. Se conosci la creazione di oggetti in Java, puoi vedere che "Integer sum = 0", dichiara un oggetto, e quando eseguiamo il calcolo all'interno del ciclo for allora possiamo vedere che il valore primitivo "i" viene aggiunto al wrapper " somma".
  • Quindi si può scoprire che per prima cosa si verificherà la conversione da wrapper a primitiva, poiché l'operatore “+” funziona solo su primitive, e quindi si verificherà prima unboxing degli oggetti, quindi si verificherà il calcolo, quindi l'autoboxing degli oggetti ricadrà di nuovo e quindi il valore sarà assegnato alla variabile "somma".
  • Ciò comporta un sovraccarico non necessario sulla JVM poiché molti oggetti Integer intermedi verranno creati e verranno distrutti (per essere successivamente raccolti nell'immondizia), quindi può apparire un rallentamento, quindi tali logiche devono essere gestite con cura.
  • Vediamo ora condizioni diverse dalle percezioni generali e avremo del codice in cui autoboxing e unboxing diventano molto importanti per essere compresi -

Considera lo snippet posizionato di seguito, quale pensi che sarà l'output di questo?

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

  • Se stai dicendo "vero", allora sei "falso" perché anche l'output è "falso", è perché possiamo confrontare solo l'intervallo intero compreso tra -128 e 127 in questo modo, per i valori che escono da questo intervallo devono essere unboxed.
  • Quindi dobbiamo confrontare intValue () di Integer sopra, per ora, il compilatore lo fa usando la proprietà valueOf ().
  • Probabilmente, se questo rientra nell'intervallo sopra citato, allora il codice sopra così com'è sarà vero in quanto farà riferimento al pool letterale intero per il confronto.

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

Questo valuterà il valore "vero", poiché 100 è presente nel pool letterale.

Autoboxing e Unboxing in Java con sovraccarico del metodo

  • Prima di etichettare l'autoboxing e unboxing per sovraccaricare il metodo, si presume che il lettore abbia familiarità con il concetto di sovraccarico del metodo, daremo solo poche informazioni e per di più, fare riferimento alla documentazione di Oracle sullo stesso.
  • Il sovraccarico del metodo è un processo in cui viene utilizzato lo stesso nome metodo con un numero diverso di argomenti di input, diversi tipi di dati di variabili con gli stessi nomi, ecc., Utilizzati per presentare più varianti di qualsiasi metodo di calcolo in generale.
  • Facciamo un esempio per lo stesso per capirlo più in profondità e presenteremo anche l'output che appare questa volta nell'immagine -

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

Produzione -

stampa del valore non in scatola 5
stampa del valore autoboxed 5

Nota: è possibile eseguire il programma sopra in uno qualsiasi degli IDE per avere l'output sopra posizionato.

  • Quindi il comportamento sopra riportato indica chiaramente che la tecnica di autoboxing ha un uso significativo nei concetti di sovraccarico e deve essere usata con cura durante la codifica.

Vantaggi di Autoboxing e Unboxing in Java-

  • La conversione appropriata viene eseguita automaticamente dal compilatore.
  • Lo sviluppatore dovrebbe scrivere codice minore e quindi codice più pulito.
  • Non sono necessarie espressioni manuali di casting.

Conclusione

Abbiamo visto il caso d'uso di autoboxing e unboxing, quanto sia implicito questo concetto e dove può creare vantaggi e svantaggi. Deve essere usato con cura durante la codifica, altrimenti può aggiungere un sovraccarico di conversione computazionale non necessario, quindi le conversioni devono essere fatte nelle primitive per evitare un sovraccarico eccessivo di raccolta dei rifiuti e un'eccessiva creazione di oggetti temporanei. Abbiamo anche visto il caso d'uso dell'autoboxing con il concetto di sovraccarico di Java, è possibile verificare alcuni altri vincoli insieme a questo.

Articoli consigliati

Questa è stata una guida per Autoboxing e Unboxing in Java. Qui discutiamo anche Cos'è Autoboxing e Unboxing in Java? come funziona internamente con alcuni codici di esempio? Puoi anche consultare i nostri altri articoli suggeriti per saperne di più -

  1. Che cos'è JDBC?
  2. Che cos'è Generics in Java?
  3. Groovy vs Java
  4. Che cos'è l'ereditarietà Java?
  5. Esempi e come funzionano i generici in C #
  6. JRE vs JVM | Le 8 principali differenze con (Infografica)

Categoria: