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.