Sobes.tech
Middle

Ce se întâmplă atunci când comparăm Integer a = 127 și int b = 127, precum și Integer a1 = 128 și int b1 = 128 în Java? Explicați de ce rezultatele comparației vor fi diferite.

sobes.tech AI

Răspuns de la AI

Atunci când compari Integer a = 127 și int b = 127 folosind operatorul ==, rezultatul va fi true. Acest lucru se datorează autoboxing-ului (autoboxing) lui int b în obiectul Integer, precum și faptului că valoarea 127 se află în intervalul de obiecte Integer în cache (implicit de la -128 până la 127). Java utilizează un pool de obiecte pentru aceste valori, astfel încât a și b împachetat fac referire la același obiect.

Comparând Integer a1 = 128 și int b1 = 128, rezultatul operatorului == va fi false. Deși și b1 este automat împachetat în Integer, valoarea 128 este în afara intervalului de valori în cache. Prin urmare, în timpul autoboxing-ului, se creează un nou obiect Integer pentru b1. Referințele a1 și b1 împachetat fac referire la diferite obiecte în heap, chiar dacă valorile numerice sunt identice.

Pentru compararea valorilor obiectelor de tip wrapper (cum ar fi Integer), trebuie folosită metoda equals().

// Compararea valorilor
Integer a = 127;
int b = 127;
System.out.println(a == b); // true (autoboxing și caching pentru Integer)
System.out.println(a.equals(b)); // true (compararea valorilor)

Integer a1 = 128;
int b1 = 128;
System.out.println(a1 == b1); // false (autoboxing, dar fără cache pentru această valoare)
System.out.println(a1.equals(b1)); // true (compararea valorilor)

Integer a2 = new Integer(127); // Crearea unui nou obiect, chiar dacă valoarea este în cache
Integer a3 = new Integer(127);
System.out.println(a2 == a3); // false (diferite obiecte)
System.out.println(a2.equals(a3)); // true (compararea valorilor)

Prin urmare, == compară referințele obiectelor pentru tipurile wrapper, în timp ce pentru compararea tipurilor primitive sau a valorilor obiectelor wrapper, trebuie folosit equals(). Caracteristica de caching a Integer pentru intervalul [-128, 127] influențează rezultatul == atunci când se lucrează cu numere din acest interval.