Saltar al contenido principal

Wrappers de tipos primitivos

En Java, cada tipo de dato primitivo tiene una clase correspondiente, que se conoce como su wrapper class o clase envolvente. Estas clases permiten que los tipos primitivos se traten como objetos, lo que es útil en varias situaciones, como en las colecciones (por ejemplo, listas o mapas) donde se requieren objetos. A continuación, se presenta una relación entre los tipos primitivos de Java y sus clases envolventes correspondientes:

Tipo PrimitivoClase Envolvente
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

Conversión de tipos entre primitivos y wrappers

El autoboxing y el unboxing son procesos que permiten convertir automáticamente entre tipos primitivos y sus clases envolventes (wrappers), lo que facilita la manipulación de estos datos en contextos que requieren objetos.

Autoboxing

Autoboxing ocurre cuando un valor primitivo es automáticamente convertido en su clase envolvente. Esto es útil cuando necesitas trabajar con objetos en vez de tipos primitivos, como al añadir elementos a una colección List que solo admite objetos.

int numeroPrimitivo = 5;
// Java automáticamente convierte el primitivo 'int' en un 'Integer'
Integer numeroEnvolto = numeroPrimitivo;

System.out.println(numeroEnvolto); // Salida: 5

En el ejemplo anterior, numeroPrimitivo es automáticamente convertido en un objeto de tipo Integer.

Unboxing

Unboxing es el proceso inverso: la conversión de un objeto de una clase envolvente a su tipo primitivo correspondiente. Esto ocurre cuando necesitas usar un valor envuelto en operaciones que requieren tipos primitivos.

Integer numeroEnvolto = 10;
// Java automáticamente extrae el valor primitivo del objeto 'Integer'
int numeroPrimitivo = numeroEnvolto;

System.out.println(numeroPrimitivo); // Salida: 10

Cuándo utilizar clases envolventes

En estos casos deberías utilizar clases envolventes en lugar de tipos primitivos:

  • Trabajo con colecciones (listas, mapas, etc.): Las clases envolventes son necesarias cuando trabajas con colecciones en Java, como ArrayList, HashMap, etc., que no pueden contener tipos primitivos. En este caso, debes usar Integer, Double, Boolean, etc.
  • Necesidad de características avanzadas: Las clases envolventes proporcionan métodos adicionales que los tipos primitivos no tienen. Por ejemplo, la clase Integer tiene el método Integer.parseInt(), y Double tiene Double.isNaN() para comprobar si un número no es un número (NaN).
  • Valores nulos: Los tipos primitivos no pueden tener valores nulos, mientras que las clases envolventes sí. Esto es útil si necesitas representar un valor no inicializado o desconocido. Por ejemplo, una variable Integer puede ser null, mientras que un int no.