GeeksforGeeks

Ogólnie zarówno equals() jak i operator „==” w Javie są używane do porównywania obiektów w celu sprawdzenia równości, ale tutaj są pewne różnice pomiędzy nimi:

  1. Główną różnicą między metodą .equals() a operatorem == jest to, że jedna jest metodą, a druga operatorem.
  2. Operatorów == możemy używać do porównywania referencji (porównywania adresów), a metody .equals() do porównywania zawartości. W prostych słowach, == sprawdza czy oba obiekty wskazują na to samo miejsce w pamięci, podczas gdy .equals() ocenia porównanie wartości w obiektach.
  3. Jeśli klasa nie nadpisuje metody equals, wtedy domyślnie używa metody equals(Object o) najbliższej klasy nadrzędnej, która nadpisała tę metodę. Zobacz to dla szczegółów
  4. Przykład kodowania:

    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));
    }
    }

    
    

    
    

    Wyjście:

    falsetrue

    Wyjaśnienie: Tutaj tworzymy dwa obiekty mianowicie s1 i s2.

    • Oba obiekty s1 i s2 odnoszą się do różnych obiektów.
    • Gdy używamy operatora == do porównania s1 i s2, wynik jest fałszywy, ponieważ oba mają różne adresy w pamięci.
    • Używając equals, wynik jest prawdziwy, ponieważ porównuje tylko wartości podane w s1 i s2.

Zrozummy oba operatory w szczegółach:

Operator równości(==)

Możemy zastosować operatory równości dla każdego typu prymitywnego, w tym typu boolean. możemy również zastosować operatory równości dla typów obiektowych.

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);
}
}



Wyjście:

falsefalsetruetrue

Jeśli zastosujemy == dla typów obiektów wtedy, powinna istnieć zgodność między typami argumentów (albo dziecko do rodzica, albo rodzic do dziecka lub tego samego typu). W przeciwnym razie dostaniemy błąd czasu kompilacji.

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);
}
}



Wyjście:

falsefalse// error: incomparable types: Thread and String

.equals()

W Javie, metoda string equals() porównuje dwa podane ciągi znaków na podstawie danych / zawartości ciągu znaków. Jeśli cała zawartość obu łańcuchów jest taka sama, zwraca wartość true. Jeśli wszystkie znaki nie są dopasowane, wtedy zwraca 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));
}
}



Wyjście:

truefalsefalsefalsetrue

Wyjaśnienie: Tutaj używamy metody .equals do sprawdzenia, czy dwa obiekty zawierają te same dane, czy nie.

  • W powyższym przykładzie tworzymy 3 obiekty Thread i 2 obiekty String.
  • W pierwszym porównaniu sprawdzamy, czy t1 == t3, czy nie. Ponieważ wiemy, że oba t1 i t3 wskazują na ten sam obiekt, dlatego zwraca true.
  • W drugim porównaniu, używamy operatora „==” do porównywania obiektów łańcuchowych, a nie zawartości obiektów. Tutaj oba obiekty są różne i dlatego wynikiem tego porównania jest „False”
  • Gdy porównujemy 2 obiekty String za pomocą operatora .equals() to sprawdzamy, czy oba obiekty zawierają te same dane, czy nie.
  • Oba obiekty zawierają ten sam String i.e. GEEKS dlatego zwraca true.

Ten artykuł został napisany przez Bishal Kumar Dubey. Jeśli podoba Ci się GeeksforGeeks i chciałbyś przyczynić się do jego powstania, możesz również napisać artykuł korzystając z adresu contribute.geeksforgeeks.org lub wysłać go pocztą na adres [email protected]. Zobacz, jak twój artykuł pojawia się na stronie głównej GeeksforGeeks i pomóż innym Geekom.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.