Autoboxing y unboxing
Reglas de conversión automática
Autoboxing y unboxing es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Conversión automática
El autoboxing consiste en que Java convierte automáticamente un primitivo en su objeto envoltorio. El unboxing es el proceso inverso: convierte un envoltorio de nuevo en un primitivo.
Esto ocurre de forma transparente, de modo que puede combinar ambos mundos sin invocar métodos de conversión manualmente.
El boxing en acción
Asignar un int a una variable Integer activa el autoboxing. El compilador inserta por usted una llamada a Integer.valueOf.
public class Main {
public static void main(String[] args) {
int primitive = 42;
Integer boxed = primitive;
System.out.println(boxed);
}
}El unboxing en acción
Asignar un Integer a un int activa el unboxing. El compilador inserta internamente una llamada a intValue.
public class Main {
public static void main(String[] args) {
Integer boxed = 99;
int primitive = boxed;
System.out.println(primitive);
}
}El boxing en las colecciones
El lugar más habitual donde se observa el autoboxing es al añadir primitivos a una colección. Escriba list.add(5) y Java encapsulará automáticamente el 5 en un Integer.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
int first = nums.get(0);
System.out.println(first);
}
}La aritmética realiza unboxing
Cuando utiliza operadores matemáticos sobre objetos envoltorio, Java primero realiza su unboxing para convertirlos en primitivos, efectúa la operación y después puede volver a encapsular el resultado.
A continuación, dos valores Integer se suman mediante el unboxing de ambos.
public class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 32;
int sum = a + b;
System.out.println(sum);
}
}Combinar primitivos y envoltorios
Puede combinar libremente un primitivo y un envoltorio en una expresión. Java realiza el unboxing del envoltorio para que ambos lados sean primitivos durante el cálculo.
public class Main {
public static void main(String[] args) {
Integer wrapped = 7;
int raw = 3;
int product = wrapped * raw;
System.out.println(product);
}
}El boxing en las llamadas a métodos
El autoboxing también se aplica a los argumentos de los métodos. Un método que espera un Object o un envoltorio puede recibir un primitivo, y Java lo encapsula al pasarlo.
public class Main {
static void show(Object value) {
System.out.println("Got: " + value);
}
public static void main(String[] args) {
show(123);
show(true);
}
}El coste oculto
El autoboxing es práctico, pero no es gratuito. Cada operación de boxing crea un objeto, y los bucles ajustados pueden crear millones de objetos de corta duración.
En bucles numéricos críticos para el rendimiento, trabaje directamente con primitivos en lugar de envoltorios.
public class Main {
public static void main(String[] args) {
long total = 0;
for (int i = 0; i < 5; i++) {
total += i;
}
System.out.println(total);
}
}valueOf frente a new
El autoboxing utiliza Integer.valueOf, que almacena en caché los valores pequeños entre -128 y 127. Invocar new Integer(...) siempre crea un objeto nuevo y actualmente está obsoleto.
Prefiera dejar que el autoboxing haga su trabajo.
public class Main {
public static void main(String[] args) {
Integer cached = Integer.valueOf(50);
System.out.println(cached);
}
}El operador ternario y el boxing
Una regla sutil: en una expresión ternaria, si una rama es un primitivo y la otra es un envoltorio, Java puede realizar el unboxing de ambos para obtener un tipo primitivo común.
Esto suele ser seguro, pero tenga presente que puede activar conversiones que no esperaba.
public class Main {
public static void main(String[] args) {
boolean flag = true;
Integer result = flag ? 1 : 2;
System.out.println(result);
}
}Cuándo resulta útil
El autoboxing existe para que el código sea más legible al combinar primitivos con genéricos y colecciones. Utilizado correctamente, elimina código innecesario. Utilizado sin cuidado en bucles críticos, perjudica el rendimiento.
Comprobación rápida
Compruebe cuánto domina las reglas del autoboxing.
Repaso
Ha aprendido cómo funcionan el autoboxing y el unboxing:
- El autoboxing convierte un primitivo en un envoltorio mediante
valueOf - El unboxing convierte un envoltorio de nuevo en un primitivo mediante métodos como
intValue - Ocurre en asignaciones, colecciones, operaciones aritméticas y llamadas a métodos
- Es práctico, pero crea objetos, por lo que debe evitarlo en bucles críticos
Preguntas frecuentes
¿La lección «Autoboxing y unboxing» es gratis?
Sí — el texto completo de «Autoboxing y unboxing» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Autoboxing y unboxing»?
Reglas de conversión automática Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Autoboxing y unboxing»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Tipos primitivos frente a wrapper
- Autoboxing y unboxing
- Parsing y Valueof
- Problemas del autoboxing