În această postare, vom discuta despre diferența dintre operatorul == și metoda equals() în Java.
==
Operatorul ==
este un operator relațional în Java care este folosit pentru a compara tipuri primitive cum ar fi int, double, char, float, etc. Nu ar trebui să fie utilizat pentru a compara două referințe de obiect, deoarece pentru orice valori de referință non-null x și y, x == y
returnează true numai atunci când x și y se referă la același obiect.
equals()
, pe de altă parte, este o metodă din clasa Object
care este utilizată pentru compararea obiectelor. Ea se comportă similar cu operatorul ==
dacă nu este suprascrisă de o clasă. Fiecare clasă ar trebui să suprascrie metoda equals()
din clasa Object
și să specifice relația de echivalență a obiectelor. Relația de echivalență ar trebui să fie astfel încât metodele equals()
să evalueze comparația valorilor din obiecte, indiferent dacă cele două obiecte se referă la aceeași instanță sau nu. Deoarece obiectele egale trebuie să aibă coduri hash egale, este necesar să se suprascrie și metoda hashCode()
.
Din moment ce String este un obiect în Java, ar trebui să folosim întotdeauna metoda equals()
pentru compararea a două șiruri de caractere în Java. Acest lucru funcționează deoarece clasa String
suprascrie metoda equals()
a clasei Object
.
După cum reiese din programul de mai sus, compararea a două șiruri de caractere folosind metoda ==
și equals()
returnează rezultate diferite. Acest lucru se datorează faptului că ==
efectuează o comparație de referință, adică compară dacă două variabile se referă la același obiect sau nu. Deoarece creăm două noi obiecte String
folosind constructorul String
, acestea nu vor împărți aceeași referință și s1 == s2
returnează fals. Prin urmare, nu ar trebui să folosim niciodată operatorul ==
pentru compararea a două șiruri de caractere.
Pe de altă parte, metoda equals()
a clasei String
compară conținutul tabloului de caractere susținut și returnează o valoare booleană ca rezultat al comparației.
Cu toate acestea, codul de mai jos oferă rezultate diferite. Acest lucru se datorează faptului că literalele String sunt stocate în String constant pool, iar ambele s1 & s2 vor împărți aceeași referință. Deci s1 == s2
returnează true.
(6 voturi, media: 5.00 din 5)
Mulțumesc pentru lectură.