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:
publicclassTest {publicstaticvoidmain(String args){String s1 =newString("HELLO");String s2 =newString("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.