Autoboxing y Unboxing en Java

En Java, los tipos de datos primitivos se tratan de manera diferente, por lo que viene la introducción de clases contenedoras donde dos componentes juegan un papel, a saber, Autoboxing y Unboxing. Autoboxing se refiere a la conversión de un valor primitivo en un objeto de la clase contenedora correspondiente que se denomina autoboxing. Por ejemplo, convertir int a la clase Integer. El compilador de Java aplica autoboxing cuando un valor primitivo es: 

  • Pasado como parámetro a un método que espera un objeto de la clase contenedora correspondiente.
  • Asignado a una variable de la clase contenedora correspondiente .

Unboxing , por otro lado, se refiere a convertir un objeto de tipo contenedor a su valor primitivo correspondiente. Por ejemplo, conversión de Integer a int. El compilador de Java se aplica a unbox cuando un objeto de una clase contenedora es: 

  • Pasado como parámetro a un método que espera un valor del tipo primitivo correspondiente.
  • Asignado a una variable del tipo primitivo correspondiente .
tipo primitivo Clase contenedora
booleano booleano
byte Byte
carbonizarse Personaje
flotar  Flotar
En t  Entero
largo Largo
corto  Corto
doble Doble

La siguiente tabla enumera los tipos primitivos y sus correspondientes clases contenedoras, que utiliza el compilador de Java para autoboxing y unboxing. Ahora analicemos algunas ventajas del autoboxing y unboxing para entender por qué lo estamos usando. 

  • El autoboxing y unboxing permite a los desarrolladores escribir un código más limpio, lo que facilita su lectura.
  • La técnica nos permite usar tipos primitivos y objetos de la clase Wrapper indistintamente y no necesitamos realizar ningún encasillamiento de forma explícita.

Ejemplo 1:

Java

// Java program to illustrate the Concept
// of Autoboxing and Unboxing
 
// Importing required classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an Integer Object
        // with custom value say it be 10
        Integer i = new Integer(10);
 
        // Unboxing the Object
        int i1 = i;
 
        // Print statements
        System.out.println("Value of i:" + i);
        System.out.println("Value of i1: " + i1);
 
        // Autoboxing of character
        Character gfg = 'a';
 
        // Auto-unboxing of Character
        char ch = gfg;
 
        // Print statements
        System.out.println("Value of ch: " + ch);
        System.out.println(" Value of gfg: " + gfg);
    }
}

Producción:

Entendamos cómo el compilador realizó el autoboxing y el unboxing en el ejemplo de Collections in Java usando generics .

Ejemplo 2:

Java

// Java Program to Illustrate Autoboxing
 
// Importing required classes
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an empty Arraylist of integer type
        ArrayList<Integer> al = new ArrayList<Integer>();
 
        // Adding the int primitives type values
        // using add() method
        // Autoboxing
        al.add(1);
        al.add(2);
        al.add(24);
 
        // Printing the ArrayList elements
        System.out.println("ArrayList: " + al);
    }
}
Producción

ArrayList: [1, 2, 24]

Explicación de salida: 

En el ejemplo anterior, hemos creado una lista de elementos del tipo Integer. Estamos agregando valores de tipo primitivo int en lugar de Integer Object y el código se compila con éxito. No genera un error de tiempo de compilación ya que el compilador de Java crea un objeto contenedor de enteros a partir de int i primitivo y lo agrega a la lista. 

Ejemplo 3:

Java

// Java Program to Illustrate Autoboxing
 
// Importing required classes
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an empty ArrayList of integer type
        List<Integer> list = new ArrayList<Integer>();
 
        // Adding the int primitives type values by
        //  converting them into Integer wrapper object
        for (int i = 0; i < 10; i++)
 
            System.out.println(
                list.add(Integer.valueOf(i)));
    }
}
Producción

true
true
true
true
true
true
true
true
true
true

Otro ejemplo de auto y unboxing es encontrar la suma de números impares en una lista. Un punto importante del programa es que los operadores de resto (%) y unario más (+=) no se aplican a objetos enteros. Pero aún así, el código se compila con éxito porque el desempaquetado del objeto entero al valor int primitivo se lleva a cabo al invocar el método intValue() en tiempo de ejecución. 

Ejemplo 4:

Java

// Java Program to Illustrate Find Sum of Odd Numbers
// using Autoboxing and Unboxing
 
// Importing required classes
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Method 1
    // To sum odd numbers
    public static int sumOfOddNumber(List<Integer> list)
    {
 
        // Initially setting sum to zero
        int sum = 0;
 
        for (Integer i : list) {
 
            // Unboxing of i automatically
            if (i % 2 != 0)
                sum += i;
 
            // Unboxing of i is done automatically
            // using intvalue implicitly
            if (i.intValue() % 2 != 0)
                sum += i.intValue();
        }
 
        // Returning the odd sum
        return sum;
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an empty ArrayList of integer type
        List<Integer> list = new ArrayList<Integer>();
 
        // Adding the int primitives type values to List
        for (int i = 0; i < 10; i++)
            list.add(i);
 
        // Getting sum of all odd numbers in List
        int sumOdd = sumOfOddNumber(list);
 
        // Printing sum of odd numbers
        System.out.println("Sum of odd numbers = "
                           + sumOdd);
    }
}
Producción

Sum of odd numbers = 50

Este artículo es una contribución de Nitsdheerendra . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *