1. Confronto tra stringhe
Va tutto bene. Ma puoi vedere che le stringhe s1
e s2
sono in realtà le stesse, nel senso che contengono lo stesso testo. Quando confronti le stringhe, come dici al programma di guardare non gli indirizzi degli String
oggetti, ma il loro contenuto?
Per aiutarci in questo, String
la classe di Java ha il equals
metodo. Chiamandolo sembra così:
string1.equals(string2)
Questo metodo restituisce true
se le stringhe sono le stesse e false
se non sono le stesse.
Esempio:
Codice | Nota |
---|---|
|
|
Altri esempi:
Codice | Spiegazione |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Confronto di stringhe senza distinzione tra maiuscole e minuscole
Nell'ultimo esempio, hai visto che il confronto produce . In effetti, le stringhe non sono uguali. Ma..."Hello".equals("HELLO")
false
Chiaramente, le stringhe non sono uguali. Detto questo, il loro contenuto ha le stesse lettere e differisce solo per il caso delle lettere. C'è un modo per confrontarli e ignorare il caso delle lettere? Cioè, in modo che rendi ?"Hello".equals("HELLO")
true
E la risposta a questa domanda è sì. In Java, il String
tipo ha un altro metodo speciale: equalsIgnoreCase
. Chiamandolo sembra così:
string1.equalsIgnoreCase(string2)
Il nome del metodo si traduce approssimativamente come compare ma ignore case . Le lettere nel nome del metodo includono due linee verticali: la prima è minuscola L
e la seconda è maiuscola i
. Non lasciarti confondere.
Esempio:
Codice | Nota |
---|---|
|
|
3. Esempio di confronto tra stringhe
Facciamo solo un semplice esempio: supponiamo di dover inserire due righe dalla tastiera e determinare se sono uguali. Ecco come apparirà il codice:
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);
4. Un'interessante sfumatura del confronto tra stringhe
C'è una sfumatura importante di cui devi essere consapevole.
Se il compilatore Java trova più stringhe identiche nel tuo codice (in particolare nel tuo codice), creerà solo un singolo oggetto per loro per risparmiare memoria.
String text = "This is a very important message";
String message = "This is a very important message";
Ed ecco cosa conterrà la memoria come risultato:
E se confronti text == message
qui, ottieni true
. Quindi non essere sorpreso da questo.
Se per qualche motivo hai davvero bisogno che i riferimenti siano diversi, puoi scrivere questo:
String text = "This is a very important message";
String message = new String ("This is a very important message");
O questo:
String text = "This is a very important message";
String message = new String (text);
In entrambi i casi, le variabili text
e message
puntano a oggetti diversi che contengono lo stesso testo.
GO TO FULL VERSION