Il metodo equals()
confronta l’oggetto su cui viene richiamato (cioè l’oggetto del parametro implicito) con l’oggetto passato come parametro e restituisce un valore booleano.
Il metodo equals()
che viene ereditato dalla classe Object
usa semplicemente l’operatore ==
per confrontare due oggetti, cioè restituisce true solo se si tratta di due riferimenti allo stesso oggetto.
Conviene ridefinire il metodo in modo da effettuare un confronto più appropriato.
Per esempio la classe String
ridefinisce il metodo equals()
in modo da restituire true se due stringhe sono formate dagli stessi caratteri.
Il metodo equals()
ha un parametro di tipo Object
; bisogna fare un cast ma prima si deve verificare se l’oggetto appartiene alla classe desiderata; se non lo è, di sicuro non sono uguali.
Si può fornire un metodo equals()
alla classe Quadrato
in modo che due quadrati risultino uguali se hanno il lato uguale.
public boolean equals(Object ogg) { boolean uguale; if (ogg instanceof Quadrato) { Quadrato q = (Quadrato)ogg; uguale = lato==q.lato; } else { uguale = false; } return uguale; }
Se invece si definisce il metodo equals()
come
public boolean equals(Quadrato q) { return lato==q.lato; }
in realtà non si ridefinisce il metodo equals()
ma lo si sovraccarica. Se viene invocato equals()
con un parametro di tipo Quadrato
viene richiamato questo metodo, se invece il parametro è un oggetto di una classe diversa viene richiamato il metodo con argomento di tipo Object
della classe Object
.