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