I Java-program används metoden equals()
för att jämföra två
godtyckliga objekt oavsett typ. Denna metod bör uppfylla ett antal
regler:
a.equals(b) == true
implicerarb.equals(a) == true
a.equals(b) == false
implicerarb.equals(a) == false
- Signaturen för
equals()
skall varaObject -> boolean
Man kan diskutera om equals()
-metoden bör förlita sig på
föränderligt tillstånd eller ej. Ett problem med detta är att två
objekt som är lika enligt equals()
senare kan ändras till att
inte vara lika längre, vilket kan leda till problem om man
förlitar sig på den “redan uträknade likheten” senare i
programmet.
Hur “lika” definieras kan vara olika – ibland används begreppet identisk för att avse att A och B är samma objekt; ibland används konceptet strukturellt lika eller ekvivalenta för att avse att A och B är två olika objekt men som ändå i enligt den gällande formen av likhet kan anses vara “utbytbara”, t.ex. A och B är två olika kakburkar som innehåller samma kaka.
Överkurs: tänk på relationen mellan equals()
och
hashcode()
och fundera över varför man ofta bör definiera en
hashcode()
-metod om man också definierar en equals()
-metod.
Report a bug on this achievement? Please place an issue on GitHub.