Differenza tra == e equals() in Java

In questo post, discuteremo la differenza tra l’operatore == e il metodo equals() in Java.

Il == è un operatore relazionale in Java che viene usato per confrontare tipi primitivi come int, double, char, float, ecc. Non dovrebbe essere usato per confrontare due riferimenti a oggetti poiché per qualsiasi valore di riferimento non nullo x e y, x == y restituisce vero solo quando x e y si riferiscono allo stesso oggetto.

equals(), d’altra parte è un metodo nella classe Object che è usato per confrontare oggetti. Si comporta in modo simile all’operatore == se non viene sovrascritto da una classe. Ogni classe dovrebbe sovrascrivere il metodo equals() della classe Object e specificare la relazione di equivalenza sugli oggetti. La relazione di equivalenza dovrebbe essere tale che i metodi equals() valutino il confronto dei valori negli oggetti indipendentemente dal fatto che i due oggetti si riferiscano o meno alla stessa istanza. Poiché gli oggetti uguali devono avere codici hash uguali, è necessario sovrascrivere anche il metodo hashCode().

Siccome String è un oggetto in Java, dovremmo sempre usare il metodo equals() per confrontare due stringhe in Java. Questo funziona perché la classe String sovrascrive il metodo equals() della classe Object.

Come è evidente dal programma sopra, confrontare due stringhe usando i metodi == e equals() restituisce risultati diversi. Questo perché == sta eseguendo un confronto di riferimento, cioè sta confrontando se due variabili si riferiscono allo stesso oggetto o no. Poiché stiamo creando due nuovi oggetti String usando il costruttore String, non condivideranno lo stesso riferimento e s1 == s2 restituisce false. Quindi, non dovremmo mai usare l’operatore == per confrontare due stringhe.

D’altra parte, il metodo equals() della classe String confronta il contenuto della matrice di caratteri appoggiata e restituisce un valore booleano come risultato del confronto.

Tuttavia, il codice seguente dà risultati diversi. Questo perché i letterali String sono memorizzati nel pool di costanti String, ed entrambi s1 & s2 condivideranno lo stesso riferimento. Quindi s1 == s2 restituisce true.

(6 voti, media: 5.00 su 5)

Grazie per la lettura.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.