Sobes.tech
Middle

Cosa succede confrontando Integer a = 127 e int b = 127, così come Integer a1 = 128 e int b1 = 128 in Java? Spiega perché i risultati del confronto saranno diversi.

sobes.tech AI

Risposta dell'AI

Confrontando Integer a = 127 e int b = 127 usando l'operatore ==, il risultato sarà true. Ciò avviene a causa dell'autoboxing (autoboxing) di int b in un oggetto Integer, e anche perché il valore 127 si trova nell'intervallo degli oggetti Integer memorizzati nella cache (di default da -128 a 127). Java utilizza un pool di oggetti per questi valori, quindi a e il b impacchettato puntano allo stesso oggetto.

Confrontando Integer a1 = 128 e int b1 = 128, il risultato dell'operatore == sarà false. Sebbene anche b1 venga automaticamente impacchettato in un oggetto Integer, il valore 128 è fuori dall'intervallo di valori in cache. Di conseguenza, durante l'autoboxing, viene creato un nuovo oggetto Integer per b1. I riferimenti a1 e il b1 impacchettato puntano a oggetti diversi nel heap, anche se i loro valori numerici sono uguali.

Per confrontare i valori degli oggetti wrapper (come Integer), si dovrebbe usare il metodo equals().

// Confronto dei valori
Integer a = 127;
int b = 127;
System.out.println(a == b); // true (autoboxing di int e caching di Integer)
System.out.println(a.equals(b)); // true (confronto dei valori)

Integer a1 = 128;
int b1 = 128;
System.out.println(a1 == b1); // false (autoboxing di int, ma nessun caching per questo valore)
System.out.println(a1.equals(b1)); // true (confronto dei valori)

Integer a2 = new Integer(127); // Creazione di un nuovo oggetto, anche se il valore è in cache
Integer a3 = new Integer(127);
System.out.println(a2 == a3); // false (oggetti diversi nel heap)
System.out.println(a2.equals(a3)); // true (confronto dei valori)

Pertanto, == confronta i riferimenti degli oggetti per i tipi wrapper, mentre per confrontare tipi primitivi o valori di oggetti wrapper si dovrebbe usare equals(). La cache di Integer per l'intervallo [-128, 127] influisce sul risultato di == quando si lavora con numeri in questo intervallo.