CodeGym /Blog Java /Random-ES /Autoboxing y Unboxing en Java
John Squirrels
Nivel 41
San Francisco

Autoboxing y Unboxing en Java

Publicado en el grupo Random-ES
En Java, una característica de las primitivas y sus envoltorios es el autoboxing/unboxing. Profundicemos en este concepto. Como ya hemos aprendido, Java es un lenguaje orientado a objetos. Eso significa que todos los programas escritos en Java están hechos de objetos. Los primitivos no son objetos. Pero aun así, a una variable contenedora se le puede asignar un valor primitivo. Este proceso se llama autoboxing. De manera similar, a una variable primitiva se le puede asignar un objeto contenedor. Este proceso se llama unboxing. Por ejemplo:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // Unboxing
       y = x * 123; // Autoboxing
   }
}
En la línea 5, asignamos y, que es un objeto entero , a la primitiva x . Como puede ver, no tenemos que realizar ningún paso adicional: el compilador sabe que int e Integer son, esencialmente, la misma cosa. Eso es unboxing. Algo similar sucede con el autoboxing en la línea 6: el valor primitivo (x * 123) se asigna fácilmente al objeto y . Este es un ejemplo de autoboxing. Es por eso que el término incluye la palabra "auto": porque no tienes que hacer nada especial para asignar primitivas a sus correspondientes objetos contenedores (y viceversa). Todo sucede automáticamente. Conveniente, ¿eh? :) Vemos otro ejemplo de la conveniencia del autoboxing/unboxing cuando se trabaja con métodos. Esto se debe a que los argumentos del método también están autoencuadrados y sin encuadrar. Por ejemplo, si un método toma dos objetos Integer como entradas, ¡podemos pasar fácilmente int s ordinarios en su lugar!
public class Main {
   public static void main(String[] args) {

       printNumber(7);// A standard int, not even an int variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered the number " + i);
   }
}
Producción:
You entered the number 7
También funciona en la otra dirección:
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered the number " + i);
   }
}
Un punto importante que debes recordar es este: ¡el autoboxing y unboxing no funcionan para matrices!
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);// Error, this won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
Intentar pasar una matriz de primitivas a un método que toma una matriz de objetos dará como resultado un error de compilación. En conclusión, comparemos brevemente las primitivas y los contenedores una vez más.

Primitivos:

  • Tener ventajas de rendimiento
Envoltorios:
  • Permítanos no violar el principio de "todo es un objeto", lo que significa que los números, caracteres y valores booleanos no violan este concepto.
  • Amplíe las posibilidades de trabajar con estos valores proporcionando métodos y campos convenientes.
  • Son necesarios cuando un método sólo funciona con objetos.
Para reforzar lo aprendido, te sugerimos ver una lección en video de nuestro Curso de Java
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION