Ce face String.equals
a.equals(b) returnează true dacă b este tot un String cu exact aceleași caractere. Aceasta este metoda corectă pentru a compara texte. Operatorul == compară referințele (dacă e același obiect în memorie) și poate da false pentru două texte identice.
equalsIgnoreCase ignoră diferența dintre litere mari și mici, caracter cu caracter: "IAȘI".equalsIgnoreCase("Iași") este true. equalsFoldCase (Java 26) aplică regulile complete Unicode, în care un caracter se poate transforma în două (ß ↔ ss).
Dacă variabila poate fi null, scrie literalul în față: "da".equals(raspuns) nu aruncă excepție, sau folosește Objects.equals(a, b).
Parametri
| Parametru | Descriere |
|---|---|
obiect / altul |
Valoarea comparată. null este permis și dă false. |
Ce returnează
true dacă textele sunt egale (după regula metodei), altfel false.
Exemple
Exemplul 1: equals vs ==
new String(...) creează un obiect nou, deci == dă false, deși textul este același.
public class Main {
public static void main(String[] args) {
String a = "Iași";
String b = new String("Iași");
String c = "Ia" + "și";
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a.equals("iași"));
System.out.println(a.equalsIgnoreCase("IAȘI"));
}
}
Rezultat
false
true
true
false
true
Exemplul 2: Răspuns de la tastatură, cu null în siguranță
"da".equalsIgnoreCase(r) funcționează chiar dacă r este null.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
String r = in.hasNextLine() ? in.nextLine().strip() : null;
if ("da".equalsIgnoreCase(r)) {
System.out.println(r + " -> confirmat");
} else {
System.out.println(r + " -> anulat");
}
}
}
}
Ce scrie utilizatorul (intrare)
DA
nu
Rezultat
DA -> confirmat
nu -> anulat
null -> anulat
Exemplul 3: equalsIgnoreCase vs equalsFoldCase
public class Main {
public static void main(String[] args) {
System.out.println("Straße".equalsIgnoreCase("STRASSE"));
System.out.println("Straße".equalsFoldCase("STRASSE"));
System.out.println("ȘCOALA".equalsFoldCase("școala"));
}
}
Rezultat
false
true
true
Greșeli frecvente
- Compari șiruri cu
==. Uneori pare să meargă (literalele identice sunt același obiect), dar un text citit de la tastatură sau dintr-un fișier este alt obiect. Folosește mereuequals. - Scrii
raspuns.equals("da")cândraspunspoate finull:NullPointerException. Inversează:"da".equals(raspuns).
Comenzi înrudite
String.compareTo: Compară două șiruri în ordine lexicografică: rezultat negativ, zero sau pozitiv; variante fără litere mari/mici.String.contentEquals: Compară textul șirului cu orice CharSequence (StringBuilder, StringBuffer etc.), indiferent de tip.Object.equals: equals() spune dacă două obiecte sunt „egale”, iar hashCode() dă un număr folosit de HashMap și HashSet; se suprascriu împreună.String.intern: Returnează exemplarul unic, din rezerva internă a JVM, pentru textul dat; textele egale devin același obiect.