1. Compararea corzilor
Toate acestea sunt bine și bune. Dar puteți vedea că șirurile s1
și s2
sunt de fapt aceleași, ceea ce înseamnă că conțin același text. Când comparați șirurile de caractere, cum îi spuneți programului să nu se uite la adresele obiectelor String
, ci la conținutul acestora?
Pentru a ne ajuta în acest sens, clasa Java String
are equals
metoda. Apelarea arată astfel:
string1.equals(string2)
Această metodă returnează true
dacă șirurile sunt aceleași și false
dacă nu sunt aceleași.
Exemplu:
Cod | Notă |
---|---|
|
|
Mai multe exemple:
Cod | Explicaţie |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Compararea șirurilor de caractere care nu ține seama de majuscule și minuscule
În ultimul exemplu, ați văzut că comparația dă . Într-adevăr, șirurile nu sunt egale. Dar..."Hello".equals("HELLO")
false
În mod clar, șirurile nu sunt egale. Acestea fiind spuse, conținutul lor are aceleași litere și diferă doar prin cazul literelor. Există vreo modalitate de a le compara și de a ignora cazul literelor? Adică, astfel încât randamentele ?"Hello".equals("HELLO")
true
Și răspunsul la această întrebare este da. În Java, String
tipul are o altă metodă specială: equalsIgnoreCase
. Apelarea arată astfel:
string1.equalsIgnoreCase(string2)
Numele metodei se traduce aproximativ ca compara, dar ignora majuscule . Literele din numele metodei includ două linii verticale: prima este o literă mică L
, iar a doua este o literă mare i
. Nu lăsa asta să te încurce.
Exemplu:
Cod | Notă |
---|---|
|
|
3. Exemplu de comparație de șiruri
Să dăm doar un exemplu simplu: să presupunem că trebuie să introduceți două linii de la tastatură și să determinați dacă sunt aceleași. Iată cum va arăta codul:
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. O nuanță interesantă a comparației șirurilor
Există o nuanță importantă de care trebuie să fii conștient.
Dacă compilatorul Java găsește mai multe șiruri identice în codul dvs. (în special în codul dvs.), atunci va crea doar un singur obiect pentru ele pentru a economisi memorie.
String text = "This is a very important message";
String message = "This is a very important message";
Și iată ce va conține memoria ca rezultat:
Și dacă comparați text == message
aici, atunci obțineți true
. Deci nu fi surprins de asta.
Dacă dintr-un motiv oarecare aveți nevoie într-adevăr ca referințele să fie diferite, atunci puteți scrie asta:
String text = "This is a very important message";
String message = new String ("This is a very important message");
Sau asta:
String text = "This is a very important message";
String message = new String (text);
În ambele cazuri, variabilele text
și message
indică obiecte diferite care conțin același text.
GO TO FULL VERSION