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