2016-06-30 12 views
0

Ich weiß, es gibt mehrere Blogs auf "wie überschreiben und hexcode" und "Problem, wenn wir eine andere nicht überschreiben".wenn überschreiben gleich und hashcode in java

Meine Frage ist sehr einfach. In welcher Situation wird empfohlen, Gleichheitszeichen und Hashcode zu überschreiben?

+1

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

Antwort

0

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 ?!

0

Tun Sie es immer, wenn Sie den Standardbegriff der Gleichheit überschreiben müssen: dass zwei Objekte nur dann gleich sind, wenn sie das gleiche Objekt sind.

Mit anderen Worten, wenn zwei verschiedene Instanzen in gewissem Sinne "gleich" sein können.

Zum Beispiel Integer überschreibt equals weil new Integer(2) != new Integer(2), aber Sie würden new Integer(2).equals(new Integer(2)) erwarten. Intuitiv sollte ein Objekt, das 2 darstellt, einem anderen Objekt entsprechen, das 2 darstellt.

Sie müssen hashCode gleichzeitig überschreiben, damit Ihr Wert konsistent mit der equal Implementierung in Hash-basierten Datenstrukturen funktioniert.

Verwandte Themen