GeeksforGeeks

Obecně se operátory „==“ i „equals()“ v Javě používají k porovnávání objektů a kontrole rovnosti, ale zde jsou uvedeny některé rozdíly mezi nimi:

  1. Hlavní rozdíl mezi metodou .equals() a operátorem == je ten, že jedno je metoda a druhé operátor.
  2. Operátor == můžeme použít pro porovnání odkazů (porovnání adres) a metodu .equals() pro porovnání obsahu. Zjednodušeně řečeno, == kontroluje, zda oba objekty ukazují na stejné místo v paměti, zatímco .equals() vyhodnocuje porovnání hodnot v objektech.
  3. Pokud třída nepřepisuje metodu equals, pak standardně používá metodu equals(Object o) nejbližší nadřazené třídy, která tuto metodu přepsala. Podrobnosti naleznete zde
  4. Příklad kódování:

    public class Test {
    public static void main(String args)
    {
    String s1 = new String("HELLO");
    String s2 = new String("HELLO");
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    }
    }

    
    

    
    

    Výstup:

    falsetrue

    Vysvětlení: Zde vytváříme dva objekty, a to s1 a s2.

    • Obojí s1 a s2 odkazuje na různé objekty.
    • Při použití operátoru == pro porovnání s1 a s2 je výsledek nepravdivý, protože oba mají v paměti různé adresy.
    • Při použití rovnítka je výsledek pravdivý, protože porovnává pouze hodnoty uvedené v s1 a s2.

Pochopíme oba operátory podrobněji:

Operátor rovnosti(==)

Operátor rovnosti můžeme použít pro každý primitivní typ včetně typu boolean. operátor rovnosti můžeme použít i pro objektové typy.

class Test {
public static void main(String args)
{
System.out.println(10 == 20);
System.out.println('a' == 'b');
System.out.println('a' == 97.0);
System.out.println(true == true);
}
}



Výstup:

falsefalsetruetrue

Pokud použijeme == pro typy objektů, pak by měla existovat kompatibilita mezi typy argumentů (buď dítě k rodiči, nebo rodič k dítěti, nebo stejný typ). V opačném případě dostaneme chybu při kompilaci.

class Test {
public static void main(String args)
{
Thread t = new Thread();
Object o = new Object();
String s = new String("GEEKS");
System.out.println(t == o);
System.out.println(o == s);
System.out.println(t==s);
}
}



Výstup:

falsefalse// error: incomparable types: Thread and String

.equals()

V Javě metoda string equals() porovnává dva zadané řetězce na základě údajů/obsahu řetězce. Pokud jsou všechny obsahy obou řetězců stejné, vrací hodnotu true. Pokud se všechny znaky neshodují, pak vrací false.

public class Test {
public static void main(String args)
{
Thread t1 = new Thread();
Thread t2 = new Thread();
Thread t3 = t1;
String s1 = new String("GEEKS");
String s2 = new String("GEEKS");
System.out.println(t1 == t3);
System.out.println(t1 == t2);
System.out.println(s1 == s2);
System.out.println(t1.equals(t2));
System.out.println(s1.equals(s2));
}
}



Výstup:

truefalsefalsefalsetrue

Vysvětlení: Zde používáme metodu .equals ke kontrole, zda dva objekty obsahují stejná data nebo ne.

  • V uvedeném příkladu vytváříme 3 objekty typu Thread a 2 objekty typu String.
  • V prvním porovnání zjišťujeme, zda t1 == t3, nebo ne. Protože víme, že t1 i t3 ukazují na stejný objekt, proto se vrátí true.
  • V druhém porovnání používáme operátor „==“ pro porovnání řetězcových objektů, nikoliv obsahu objektů. Zde se oba objekty liší, a proto je výsledek tohoto porovnání „False“
  • Pokud porovnáváme 2 objekty String pomocí operátoru .equals(), pak kontrolujeme, zda oba objekty obsahují stejná data, nebo ne.
  • Oba objekty obsahují stejný String, tedy GEEKS, proto se vrátí true.

Tento článek napsal Bishal Kumar Dubey. Pokud se vám GeeksforGeeks líbí a chtěli byste přispět, můžete také napsat článek pomocí stránky contribute.geeksforgeeks.org nebo poslat svůj článek na adresu [email protected]. Uvidíte, jak se váš článek objeví na hlavní stránce GeeksforGeeks, a pomůžete tak ostatním geekům.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.