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:
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.