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:
- Główną różnicą między metodą .equals() a operatorem == jest to, że jedna jest metodą, a druga operatorem.
- 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.
- 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
- Przykład kodowania:
publicclassTest {publicstaticvoidmain(String args){String s1 =newString("HELLO");String s2 =newString("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.