Sobes.tech
Middle

Mi történik, amikor összehasonlítjuk az Integer a = 127 és az int b = 127, valamint az Integer a1 = 128 és az int b1 = 128 Java-ban? Magyarázza el, miért lesz különböző az összehasonlítás eredménye.

sobes.tech MI

Válasz az MI-től

Amikor az Integer a = 127 és az int b = 127 összehasonlítását végezzük a == operátorral, az eredmény true lesz. Ez az autoboxing (autoboxing) miatt történik, amikor az int b-t Integer objektummá alakítja, valamint azért, mert az érték 127 a cache-elt Integer objektumok tartományában van (alapértelmezés szerint -128-tól 127-ig). A Java egy objektummedencét használ ezekhez az értékekhez, így az a és a csomagolt b ugyanarra az objektumra mutat.

Az Integer a1 = 128 és az int b1 = 128 összehasonlításakor a == eredménye false lesz. Bár a b1-et is automatikusan csomagolják Integer-ré, az érték 128 kívül esik a cache-elt tartományon. Ezért autoboxing során egy új Integer objektum jön létre a b1-hez. Az a1 és a csomagolt b1 különböző objektumokra mutatnak a heapen, még akkor is, ha a numerikus értékük megegyezik.

Az objektum-wrapper értékek összehasonlításához (például Integer) a equals() metódust kell használni.

// Érték összehasonlítás
Integer a = 127;
int b = 127;
System.out.println(a == b); // true (autoboxing és cache-elés)
System.out.println(a.equals(b)); // true (érték összehasonlítás)

Integer a1 = 128;
int b1 = 128;
System.out.println(a1 == b1); // false (autoboxing, de nincs cache ehhez az értékhez)
System.out.println(a1.equals(b1)); // true (érték összehasonlítás)

Integer a2 = new Integer(127); // Új objektum létrehozása, még ha az érték a cache-ben is van
Integer a3 = new Integer(127);
System.out.println(a2 == a3); // false (különböző objektumok)
System.out.println(a2.equals(a3)); // true (érték összehasonlítás)

Tehát az == az objektumreferenciákat hasonlítja össze wrapper típusok esetén, míg primitív típusok vagy wrapper értékek összehasonlításához a equals() használata ajánlott. Az Integer cache-elése a [-128, 127] tartományban befolyásolja az == eredményét, amikor ebben a tartományban lévő számokkal dolgozunk.