DEV Community

Cover image for ¿Qué es el Autoboxing y unboxing en Java?
Jordy Rodríguez
Jordy Rodríguez

Posted on

¿Qué es el Autoboxing y unboxing en Java?

Autoboxing y unboxing en Java no son trucos mágicos; son el puente entre primitivos y objetos que usas cada día. Si ves List en tu código, ya estás en su territorio.

En el día a día importan porque te evitan escribir conversiones, pero cada conversión genera objetos y, en bucles apretados, eso suma. Entender cuándo sucede la conversión te ayuda a evitar hot spots de rendimiento y errores sutiles.

El concepto en corto: el autoboxing es la conversión automática de un primitivo a su wrapper (int -> Integer, real -> Double, etc.). El unboxing es al revés, cuando una clase envoltorio se usa como primitivo en operaciones aritméticas o comparaciones. Java también usa caché para wrappers de rango pequeño (-128 a 127), lo que evita crear nuevas instancias en muchos casos. Pero ojo: convertir null a un primitivo provoca NullPointerException, y el boxing/unboxing frecuente puede generar overhead de memoria y GC si lo haces en loops críticos.

Ejemplo práctico:

List<Integer> nums = new ArrayList<>();
for (int i = 0; i < 5; i++) {
    nums.add(i); // autoboxing: int -> Integer
}
int sum = 0;
for (Integer n : nums) {
    sum += n; // unboxing: Integer -> int
}
Enter fullscreen mode Exit fullscreen mode

Este patrón es común: trabajas con colecciones de wrappers porque la API lo exige, pero luego haces cálculos con primitivos. El rendimiento mejora si evitas boxing innecesario en cuellos de botella y prefieres APIs que operan sobre primitivos cuando es posible.

Un vistazo rápido a riesgos reales: un Integer puede ser null; al despojarlo de su envoltorio en una operación, obtienes NPE. Y en bucles muy calientes, cada autoboxing implica asignaciones y posible recolección, lo que puede traer pausas inesperadas.

Hazlo hoy mismo

  • Revisa un método que recorra una List y haga sumas o cálculos. ¿Podrías usar un IntStream para evitar boxing innecesario? Por ejemplo, en lugar de sum += item, usa nums.stream().mapToInt(Integer::intValue).sum() y evita la conversión repetida.
  • Si trabajas con valores que pueden ser null, añade un filtro de nulls o usa un Optional para evitar NPEs.

Con un par de cambios pequeños, verás menos basura de objetos y choques de rendimiento sin perder la legibilidad ni la seguridad de tipos.



📬 Conecta Conmigo

Top comments (0)