ProgramaciónDesarrollador Backend

Explica cómo funciona el mecanismo de autoboxing y unboxing en Java, cuáles son sus riesgos y dónde puede conducir a errores de rendimiento o lógica.

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

Autoboxing es la conversión automática de tipos primitivos (int, double, etc.) a sus correspondientes objetos envolventes (Integer, Double, etc.). Unboxing es la conversión inversa de un objeto envolvente de vuelta a un primitivo.

Funciona automáticamente en asignaciones, argumentos de métodos y colecciones:

List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Ejemplo de autoboxing: 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing: Integer(5) -> 5

Riesgos:

  • Posibilidad de NullPointerException al hacer unboxing de null;
  • Uso ineficiente de memoria y tiempo debido a la constante creación de objetos envolventes;
  • Dificultades con == (comparación por referencia) y equals.

Pregunta capciosa.

¿Puede el siguiente código lanzar una excepción? ¿Por qué?

Integer x = null; int y = x;

Respuesta: El código lanza NullPointerException porque al intentar ejecutar int y = x; ocurre un unboxing de null a primitivo, y null no se puede convertir a int.

Ejemplos de errores reales por desconocer los matices del tema.


Historia

Cálculo de sumas en una colección de envolturas Integer. Cada vez que la suma aumentaba, se creaba un nuevo objeto Integer, lo que provocaba retrasos significativos en un servidor real en lugar de usar int.

Historia

Un programador utilizó Integer como clave para un caché, sin tener en cuenta que los valores -128...127 se almacenan en caché, mientras que los demás no. Debido a esto, == de repente comenzó a dar resultados incorrectos, lo que provocó la eliminación incorrecta de datos del caché.

Historia

En la API REST llegaron valores anulables. Un simple unboxing de un Integer entrante a veces provocaba fallos debido a un inesperado null en lugar de un número del cliente.