Se si confrontano 2 istanze di A senza eseguire l'override del metodo equals, otterrò il risultato previsto?
Questo dipende da ciò che ci si aspetta :)
L'implementazione di default vi darà uguaglianza di riferimento - in altre parole, quando si confrontano due riferimenti, equals
sarà solo restituire true se sono i riferimenti a lo stesso oggetto.
Si dovrebbe sovrascrivere lo equals
per implementare "valore di uguaglianza" - dove due oggetti distinti sono considerati uguali, di solito in virtù di avere stessi valori di campo stessi. Il significato esatto dell'uguaglianza dipenderà dal tuo design - i due oggetti potrebbero essere ancora distinguibili in altri modi, per esempio.
Se si ignora equals
, si dovrebbe anche esclusione hashCode
essere coerenti con equals
, tale che se a.equals(b)
è vero, allora a.hashCode() == b.hashCode()
. Ciò consentirà alle istanze della classe di essere utilizzate come chiavi in raccolte basate su hash (ad esempio HashMap
) in modo da poter cercare un valore basato su una chiave che è uguale a uguale a quella originale, piuttosto che dover utilizzare un riferimento all'esatto oggetto chiave originale.
fonte
2012-10-30 06:55:19
Questo è legato, ma non un duplicato di http: // StackOverflow .com/questions/27581/overriding-equals-and-hashcode-in-java perché si tratta di * come * per sovrascrivere 'equals' e' hasCode', mentre si tratta di * quando * per sovrascrivere. – Raedwald
Questo sembra essere un duplicato migliore: http://stackoverflow.com/questions/13387742 –