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
}
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.
Top comments (0)