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
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios