Sobes.tech
Junior

¿Cómo convertiría los tipos de referencia en primitivos y viceversa?

sobes.tech AI

Respuesta de la IA

Para tipos de referencia (por ejemplo, Integer, Double, Boolean) se utiliza auto-desempaquetado (unboxing) en tipos primitivos (int, double, boolean). La JVM convierte automáticamente el tipo de referencia en su equivalente primitivo cuando es necesario.

// Tipo primitivo
int primitiveInt = 10;

// Creación de un tipo de referencia a partir de un primitivo (auto-empaquetado)
Integer objectInt = primitiveInt; // Conversión automática de int a Integer

// Conversión de un tipo de referencia de vuelta a un primitivo (auto-desempaquetado)
int newPrimitiveInt = objectInt; // Conversión automática de Integer a int

Para tipos primitivos a tipos de referencia (por ejemplo, int a Integer, double a Double, boolean a Boolean) se utiliza auto-empaquetado (autoboxing). La JVM crea automáticamente un objeto de tipo de referencia a partir de un valor primitivo.

// Tipo primitivo
double primitiveDouble = 3.14;

// Creación de un tipo de referencia a partir de un primitivo (auto-empaquetado)
Double objectDouble = primitiveDouble; // Conversión automática de double a Double

// Conversión de un tipo de referencia de vuelta a un primitivo (auto-desempaquetado)
double newPrimitiveDouble = objectDouble; // Conversión automática de Double a double

Es importante recordar que al convertir un tipo de referencia en un primitivo (desempaquetado) puede ocurrir una NullPointerException si el tipo de referencia tiene valor null.

Además, antes de la aparición del auto-empaquetado/desempaquetado, se usaban métodos explícitos de las clases envolventes, como intValue(), doubleValue(), booleanValue() para convertir tipos de referencia en primitivos, y constructores de clases envolventes o métodos estáticos valueOf() para convertir tipos primitivos en tipos de referencia. El auto-empaquetado/desempaquetado simplificó mucho este proceso.

// Conversión explícita antes del auto-empaquetado/desempaquetado
Integer explicitInteger = new Integer(25); // Uso del constructor (obsoleto)
int explicitInt = explicitInteger.intValue(); // Uso del método intValue()

// Uso del método estático valueOf() (preferido)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();