String.equals în Java

Verifică dacă două șiruri au exact același text; equalsIgnoreCase și equalsFoldCase ignoră literele mari/mici.

Sintaxă
boolean equals(Object obiect)
boolean equalsIgnoreCase(String altul)
boolean equalsFoldCase(String altul)   // Java 26

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 mereu equals.
  • Scrii raspuns.equals("da") când raspuns poate fi null: 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.