A Java-ban általában mind az equals(), mind az “==” operátor az objektumok összehasonlítására szolgál az egyenlőség ellenőrzésére, de itt van néhány különbség a kettő között:
- A fő különbség az .equals() módszer és az == operátor között az, hogy az egyik egy módszer, a másik pedig egy operátor.
- Hivatkozás-összehasonlításhoz (cím-összehasonlítás) használhatjuk az == operátort, a .equals() metódust pedig a tartalom-összehasonlításhoz. Egyszerűen fogalmazva, az == ellenőrzi, hogy mindkét objektum ugyanarra a memóriahelyre mutat-e, míg az .equals() az objektumokban lévő értékek összehasonlítását értékeli.
- Ha egy osztály nem írja felül az equals metódust, akkor alapértelmezés szerint a legközelebbi szülő osztály equals(Object o) metódusát használja, amely felülírta ezt a metódust. Lásd ezt a részleteket
- Kódolási példa:
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));
}
}
Kimenet: Itt két objektumot hozunk létre, nevezetesen s1 és s2.
- Az s1 és az s2 is különböző objektumokra utal.
- Ha az == operátort használjuk az s1 és s2 összehasonlítására, akkor az eredmény hamis, mivel mindkettőnek különböző címe van a memóriában.
- Az egyenlőséget használva az eredmény igaz, mivel csak az s1 és s2-ben megadott értékeket hasonlítja össze.
Magyarázzuk meg részletesen mindkét operátort:
Egyenlőségi operátor(==)
Egyenlőségi operátorokat alkalmazhatunk minden primitív típusra, beleértve a boolean típust is. egyenlőségi operátorokat alkalmazhatunk objektumtípusokra is.
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
);
}
}
Kimenet:
falsefalsetruetrue
Ha a ==-t alkalmazzuk az objektumtípusokra, akkor az argumentumtípusok között kompatibilitásnak kell lennie (akár gyermek a szülőhöz, akár szülő a gyermekhez, akár azonos típushoz). Ellenkező esetben fordítási idejű hibát kapunk.
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);
}
}
Kimenet:
falsefalse// error: incomparable types: Thread and String
.equals()
Javában a string equals() metódus összehasonlítja a két megadott stringet a string adatai/tartalma alapján. Ha mindkét karakterlánc tartalma megegyezik, akkor igazat ad vissza. Ha az összes karakter nem egyezik, akkor false-t ad vissza.
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));
}
}
Kimenet:
truefalsefalsefalsetrue
Magyarázat:
truefalsefalsefalsetrue
Magyarázat:
truefalsefalsefalsetrue
Magyarázat: Itt az .equals metódust használjuk annak ellenőrzésére, hogy két objektum tartalmazza-e ugyanazokat az adatokat vagy sem.
- A fenti példában 3 Thread objektumot és 2 String objektumot hozunk létre.
- Az első összehasonlításban azt ellenőrizzük, hogy t1 == t3 vagy nem. Mivel tudjuk, hogy mind a t1, mind a t3 ugyanarra az objektumra mutat, ezért igazat ad vissza.
- A második összehasonlításban az “==” operátort használjuk a string objektumok összehasonlítására és nem az objektumok tartalmának összehasonlítására. Itt mindkét objektum különböző, ezért az összehasonlítás eredménye “False”
- Amikor 2 string objektumot hasonlítunk össze az .equals() operátorral, akkor azt ellenőrizzük, hogy mindkét objektum ugyanazt az adatot tartalmazza-e vagy sem.
- Mindkét objektum ugyanazt a karakterláncot, azaz GEEKS-et tartalmazza, ezért ad vissza true-t.
Ez a cikk Bishal Kumar Dubey hozzájárulása. Ha tetszik a GeeksforGeeks és szeretnél hozzájárulni, írhatsz egy cikket a contribute.geeksforgeeks.org címen, vagy elküldheted a cikkedet a [email protected] címre. Láthatod, hogy a cikked megjelenik a GeeksforGeeks főoldalán, és segíthetsz más geekeknek.