Ich bin mir ziemlich sicher, dass die meisten Tutorials, die erläutern, wie es zu tun ... auch sagen, warum Sie diese Methoden außer Kraft setzen könnte zu tun haben.
Wie auch immer, der Hauptgrund, dies zu tun: Wenn Ihre Klasse verschiedene Felder enthält und Sie sicherstellen wollen, dass zwei Objekte Ihrer Klasse, die "gleichen" Inhalt haben, gleichwertig sind.
So ist der Ort, wo Sie am meisten interessiert ist equals/hashCode am häufigsten, wenn Sie beginnen, Ihre Objekte in Sammlungen zum Beispiel schieben.
Like:
public class Example {
private final String someId;
Example(String incoming) { someId = incoming };
Dann:
new Example(new String("1")).equals(new Example(new String("1))
Was das, was Sie erwarten, ist aus, dass kommen ?!
Einfache Antwort: Wenn Sie sie von der Standardimplementierung abweichen müssen. Zusätzliche Antwort: In den meisten Fällen müssen Sie das tun, wenn die Instanzen dieser Klasse in einen Satz eingefügt oder als Map-Schlüssel verwendet werden sollen. Es gibt jedoch andere Situationen, z.B. Wenn Sie möchten, dass zwei verschiedene Instanzen als gleich betrachtet werden, wenn sie dieselben Feldwerte haben (in diesem Fall würden Sie 'equals()' und natürlich 'hashCode()' überschreiben, aufgrund dessen, was Sie bereits wissen: überschreiben Sie immer beide oder keine). – Thomas