JavaIntermedio25 oct 2025
¿Magia o Matemáticas? ¡Java y el Truco del Entero!
snippet.java
public class IntegerCacheWtf {
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println("a == b: " + (a == b));
System.out.println("c == d: " + (c == d));
}
}¿Qué crees que imprime?
✅ Salida Esperada
a == b: true
c == d: true⚠️ Salida Real
a == b: true
c == d: false¿Por qué pasa esto?
¡Agarraos, que la **autoboxing** en Java tiene un truco de magia! 🎩 Cuando asignamos `Integer a = 127;`, Java es tan majo que dice: "¡Eh, este número es pequeño y popular! Lo guardo en mi caché por si lo necesitas otra vez." Así, `a` y `b` (con 127) apuntan al **mismo objeto** en memoria, ¡como dos amigos compartiendo la misma chuche! 🍬 Por eso `a == b` es `true`. Pero con `128`, Java piensa: "Meh, este ya no es tan VIP." Y crea **nuevos objetos** para `c` y `d`. Al ser objetos distintos, aunque contengan el mismo valor, el operador `==` (que compara referencias, no valores para objetos) nos da un rotundo `false`. Es como tener dos billetes de 100€ distintos, ¡aunque valgan lo mismo! 💸 Siempre usa `equals()` para comparar valores de objetos. ¡Sorpresa! 🤯
Conceptos relacionados
autoboxingobject-identitywrapper-types