In generale sia equals() che l’operatore “==” in Java sono usati per confrontare oggetti per controllare l’uguaglianza ma qui ci sono alcune differenze tra i due:
- La differenza principale tra il metodo .equals() e l’operatore == è che uno è un metodo e l’altro un operatore.
- Possiamo usare gli operatori == per il confronto dei riferimenti (confronto degli indirizzi) e il metodo .equals() per il confronto dei contenuti. In parole semplici, == controlla se entrambi gli oggetti puntano alla stessa locazione di memoria mentre .equals() valuta il confronto dei valori negli oggetti.
- Se una classe non sovrascrive il metodo equals, allora per default usa il metodo equals(Object o) della classe madre più vicina che ha sovrascritto questo metodo. Vedi questo per i dettagli
- Esempio di codifica:
publicclassTest {publicstaticvoidmain(String args){String s1 =newString("HELLO");String s2 =newString("HELLO");System.out.println(s1 == s2);System.out.println(s1.equals(s2));}}Output:
falsetrue
Spiegazione: Qui stiamo creando due oggetti: s1 e s2.
- Entrambi s1 e s2 si riferiscono a oggetti diversi.
- Quando usiamo l’operatore == per confrontare s1 e s2 il risultato è falso perché entrambi hanno indirizzi diversi in memoria.
- Utilizzando equals, il risultato è vero perché sta solo confrontando i valori dati in s1 e s2.
Comprendiamo entrambi gli operatori in dettaglio:
Operatore di uguaglianza(==)
Possiamo applicare gli operatori di uguaglianza per ogni tipo primitivo incluso il tipo booleano.
class Test { public static void main(String args) { System.out.println(10 == 20); System.out.println('a' == 'b'); System.out.println('a' == 97.0); System.out.println(true == true); } } Output:
falsefalsetruetrue
Se applichiamo == per i tipi di oggetto allora, ci dovrebbe essere compatibilità tra i tipi di argomenti (o da figlio a genitore o da genitore a figlio o stesso tipo). Altrimenti otterremo un errore di compilazione.
class Test { public static void main(String args) { Thread t = new Thread(); Object o = new Object(); String s = new String("GEEKS"); System.out.println(t == o); System.out.println(o == s); System.out.println(t==s); } } Output:
falsefalse// error: incomparable types: Thread and String
.equals()
In Java, il metodo stringa equals() confronta le due stringhe date in base ai dati/contenuto della stringa. Se tutti i contenuti di entrambe le stringhe sono uguali, allora restituisce true. Se tutti i caratteri non corrispondono, allora restituisce false.
public class Test { public static void main(String args) { Thread t1 = new Thread(); Thread t2 = new Thread(); Thread t3 = t1; String s1 = new String("GEEKS"); String s2 = new String("GEEKS"); System.out.println(t1 == t3); System.out.println(t1 == t2); System.out.println(s1 == s2); System.out.println(t1.equals(t2)); System.out.println(s1.equals(s2)); } } Output:
truefalsefalsefalsetrue
Spiegazione: Qui stiamo usando il metodo .equals per controllare se due oggetti contengono gli stessi dati o no.
- Nell’esempio precedente, stiamo creando 3 oggetti Thread e 2 oggetti String.
- Nel primo confronto, stiamo controllando se t1 == t3 oppure no. Siccome sappiamo che sia t1 che t3 puntano allo stesso oggetto, ecco perché restituisce true.
- Nel secondo confronto, stiamo usando l’operatore “==” per confrontare gli oggetti stringa e non il contenuto degli oggetti. Qui, entrambi gli oggetti sono diversi e quindi il risultato di questo confronto è “Falso”
- Quando stiamo confrontando 2 oggetti Stringa con l’operatore .equals() allora stiamo controllando che entrambi gli oggetti contengono gli stessi dati o no.
- Entrambi gli oggetti contengono la stessa stringa, cioè GEEKS, ecco perché restituisce true.
Questo articolo è stato contribuito da Bishal Kumar Dubey. Se ti piace GeeksforGeeks e vuoi contribuire, puoi anche scrivere un articolo usando contribute.geeksforgeeks.org o inviare il tuo articolo a [email protected]. Vedi il tuo articolo apparire sulla pagina principale di GeeksforGeeks e aiuta altri Geeks.