Skip to content

Latest commit

 

History

History
39 lines (29 loc) · 1.67 KB

H18.org

File metadata and controls

39 lines (29 loc) · 1.67 KB

H18: Jämförelsemetoden equals()

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:

  1. a.equals(b) == true implicerar b.equals(a) == true
  2. a.equals(b) == false implicerar b.equals(a) == false
  3. Signaturen för equals() skall vara Object -> 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.