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:
public
class
Test {
public
static
void
main(String args)
{
String s1 =
new
String(
"HELLO"
);
String s2 =
new
String(
"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.