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:
- Hlavní rozdíl mezi metodou .equals() a operátorem == je ten, že jedno je metoda a druhé operátor.
- 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.
- 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
- Příklad kódování:
publicclassTest {publicstaticvoidmain(String args){String s1 =newString("HELLO");String s2 =newString("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.