Differenza tra il confronto di String utilizzando il metodo == e .equals() in Java
Entrambi i metodo equals() e il == operatore vengono utilizzati per confrontare due oggetti in Java.
IL Metodo Java string equals() , confronta due stringhe e restituisce true se tutti i caratteri corrispondono in entrambe le stringhe, altrimenti restituisce false.
IL == operatore confronta il riferimento o la posizione di memoria degli oggetti in un heap, indipendentemente dal fatto che puntino o meno alla stessa posizione.
Ogni volta che creiamo un oggetto utilizzando l'operatore nuovo , creerà un file nuova posizione di memoria per quell'oggetto. Quindi utilizziamo l'operatore == per verificare che la posizione di memoria o l'indirizzo di due oggetti siano uguali o meno.
In generale, sia gli operatori equals() che == in Giava sono usati per confrontare oggetti per verificare l'uguaglianza, ma ecco alcune delle differenze tra i due:
- La differenza principale tra il Metodo .equals() e il == operatore è che uno è un metodo e l'altro è l'operatore.
- Possiamo usare == operatori per il confronto dei riferimenti ( confronto degli indirizzi ) e il metodo .equals() per confronto dei contenuti . In parole semplici, == controlla se entrambi gli oggetti puntano alla stessa posizione di memoria mentre .equals() valuta il confronto dei valori negli oggetti.
- Se una classe non lo fa sovrascrivere il metodo equals , quindi, per impostazione predefinita, utilizza il metodo equals(Object o) della classe genitore più vicina che ha sovrascritto questo metodo. **Vedere Perché eseguire l'override del metodo equals(Object) e hashCode()? in dettaglio.
Esempio:
Metodo String equals() e operatore == in Java.
Giava
// Java program to understand> // the concept of == operator> public> class> Test {> > public> static> void> main(String[] args)> > {> > String s1 => 'HELLO'> ;> > String s2 => 'HELLO'> ;> > String s3 => new> String(> 'HELLO'> );> > System.out.println(s1 == s2);> // true> > System.out.println(s1 == s3);> // false> > System.out.println(s1.equals(s2));> // true> > System.out.println(s1.equals(s3));> // true> > }> }> |
Produzione
true false true true
Spiegazione: Qui creiamo due oggetti, vale a dire s1 e s2.
- Sia s1 che s2 si riferiscono agli stessi oggetti.
- Quando usiamo l'operatore == per il confronto s1 e s2, il risultato è vero poiché entrambi hanno gli stessi indirizzi nel corda piscina costante.
- Usando uguale, il risultato è vero perché confronta solo i valori indicati in s1 e s2.
Pool di stringhe Java
| s1 = CIAO |
| s2 = CIAO |
Mucchio Java
| s3 = CIAO |
Cerchiamo di comprendere entrambi gli operatori in dettaglio:
Operatore di uguaglianza(==)
Possiamo applicare operatori di uguaglianza per ogni tipo primitivo, incluso il tipo booleano. Possiamo anche applicare operatori di uguaglianza per i tipi di oggetto.
Esempio:
== operatore in Java.
Giava
// Java program to illustrate> // == operator for compatible data> // types> class> Test {> > public> static> void> main(String[] args)> > {> > // integer-type> > System.out.println(> 10> ==> 20> );> > // char-type> > System.out.println(> 'a'> ==> 'b'> );> > // char and double type> > System.out.println(> 'a'> ==> 97.0> );> > // boolean type> > System.out.println(> true> ==> true> );> > }> }> |
Produzione
false false true true
Se applichiamo == per i tipi di oggetto allora ecco dovrebbe essere la compatibilità tra i tipi di argomento (o da figlio a genitore o da genitore a figlio o dello stesso tipo). Altrimenti, riceveremo un errore in fase di compilazione.
Esempio:
Giava
// Java program to illustrate> // == operator for incompatible data types> 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);> > // Uncomment to see error> > System.out.println(t==s);> > }> }> |
Produzione:
false false // error: incomparable types: Thread and String
Metodo Java String equals()
In Giava, il Metodo String equals() confronta le due stringhe fornite in base ai dati/contenuto della stringa. Se tutto il contenuto di entrambe le stringhe è lo stesso, it restituisce vero . Se tutti i caratteri non corrispondono, allora it restituisce falso .
Sintassi:
Sintassi : booleano pubblico uguale a (Oggetto un altroOggetto)
Parametro :
- un altrooggetto- Stringa da confrontare
Ritorna:
- Valore booleano :
- VERO- Se le stringhe sono uguali
- falso- se le stringhe non sono uguali
Esempio:
Metodo String equals() in Java
Giava
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));> > }> }> |
Produzione:
true false false false true
Spiegazione: Qui utilizziamo il metodo .equals per verificare se due oggetti contengono gli stessi dati o meno.
- Nell'esempio sopra, creiamo 3 oggetti Thread e 2 oggetti String.
- Nel primo confronto controlliamo se t1 == t3 oppure no. Come sappiamo entrambi t1 e t3 puntano a stesso oggetto . Ecco perché restituisce true.
- Nel secondo confronto, utilizziamo 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 confrontiamo 2 oggetti String con l'operatore equals(), controlliamo che entrambi gli oggetti contengano o meno gli stessi dati.
- Entrambi gli oggetti contengono la stessa stringa, ovvero GEEKS. Ecco perché restituisce true.
Leggi anche:
- Metodo Character.equals() in Java con esempi
- ==, equals(), compareTo(), equalsIgnoreCase() e compare()
Conclusione
Il metodo Java string equals() e l'operatore == sono entrambi utilizzati per confrontare le stringhe in Java. In questo tutorial abbiamo trattato l'operatore == e il metodo String equals() in Java con esempi.
Read More String Methods in Java
Differenza tra il metodo == e .equals() - Domande frequenti
1. Qual è la differenza tra str1 == str2 e str1 uguale a str2?
In Java, str1==str2 restituirà true se str1 e str2 sono stringhe con lo stesso contenuto. Questo perché le stringhe con lo stesso contenuto vengono archiviate nella stessa posizione.
str1.equals(str2) restituirà true se str1 e str 2 sono oggetti stringa diversi, ma hanno lo stesso contenuto.
2. Qual è la differenza tra == ed è uguale nel confronto tra stringhe?
IL metodo stringa uguale() confronta due stringhe e restituisce true se tutti i caratteri corrispondono in entrambe le stringhe, altrimenti restituisce false.
L'operatore == confronta il riferimento o la posizione di memoria degli oggetti in un heap, indipendentemente dal fatto che puntino o meno alla stessa posizione.
3. Quali sono le regole del metodo equals()?
- Riflessività: Per qualsiasi oggetto x, x.equals(x) dovrebbe sempre restituire true.
- Simmetria : Se x.equals(y) restituisce vero, anche y.equals(x) deve restituire vero.
- Transitività : Se x.equals(y) e y.equals(z) sono entrambi veri, allora anche x.equals(z) deve essere vero.
- Consistenza : Più invocazioni di x.equals(y) dovrebbero restituire lo stesso risultato.
- Non nullità: Il metodo equals() non dovrebbe mai restituire true se confrontato con null.