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 Primitivo | Clase Envolvente |
|---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
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 usarInteger,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
Integertiene el métodoInteger.parseInt(), yDoubletieneDouble.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
Integerpuede sernull, mientras que unintno.