1. Confronto tra stringhe
Va tutto bene. Ma puoi vedere che le stringhe s1e s2sono 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 Stringoggetti, ma il loro contenuto?
Per aiutarci in questo, Stringla classe di Java ha il equalsmetodo. Chiamandolo sembra così:
string1.equals(string2)
Questo metodo restituisce truese le stringhe sono le stesse e falsese 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 Stringtipo 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 Le 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 == messagequi, 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 texte messagepuntano a oggetti diversi che contengono lo stesso testo.
GO TO FULL VERSION