A == és az equals() közötti különbség Java-ban

Ebben a bejegyzésben a == operátor és az equals() módszer közötti különbséget tárgyaljuk Java-ban.

A == egy relációs operátor Java-ban, amelyet primitív típusok, például int, double, char, float, stb. összehasonlítására használnak. Nem szabad két objektumhivatkozás összehasonlítására használni, mivel bármely x és y nem-null referenciaérték esetén a x == y csak akkor ad vissza igazat, ha x és y ugyanarra az objektumra utal.

equals() ezzel szemben a Object osztály egyik metódusa, amely objektumok összehasonlítására szolgál. Hasonlóan viselkedik, mint a == operátor, ha egy osztály nem írja felül. Minden osztálynak felül kell írnia a Object osztály equals() metódusát, és meg kell adnia az objektumokra vonatkozó ekvivalencia relációt. Az ekvivalencia relációnak olyannak kell lennie, hogy a equals() metódus az objektumok értékeinek összehasonlítására adjon értéket, függetlenül attól, hogy a két objektum ugyanarra a példányra utal-e vagy sem. Mivel az egyenlő objektumoknak egyenlő hash-kódokkal kell rendelkezniük, ezért a hashCode() metódust is felül kell írni.

Mivel a String egy objektum a Java-ban, ezért két string összehasonlítására mindig a equals() metódust kell használnunk a Java-ban. Ez működik, mivel a String osztály felülírja a Object osztály equals() metódusát.

A fenti programból látható, hogy két string összehasonlítása a == és a equals() metódus használatával különböző kimenetet ad vissza. Ennek oka, hogy a == referencia-összehasonlítást végez, azaz összehasonlítja, hogy két változó ugyanarra az objektumra hivatkozik-e vagy sem. Mivel két új String objektumot hozunk létre a String konstruktor segítségével, ezek nem fognak osztozni ugyanazon a hivatkozáson, és a s1 == s2 hamis értéket ad vissza. Ezért soha nem használhatjuk a == operátort két karakterlánc összehasonlítására.

Az String osztály equals() metódusa viszont összehasonlítja a támogatott char tömb tartalmát, és az összehasonlítás eredményeképpen egy bólus értéket ad vissza.

Az alábbi kód azonban más eredményt ad. Ennek az az oka, hogy a String literálok a String konstanskészletben vannak tárolva, és mindkét s1 & s2 ugyanazzal a hivatkozással fog rendelkezni. Tehát s1 == s2 true-t ad vissza.

(6 szavazat, átlag: 5.00 az 5-ből)

Köszönjük az olvasást.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.