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.