Genau, wie Thomas das schon richtig schrieb, Gleichheit wird mit equals(Object) geprüft, wobei die Regel gilt, daß wenn equals(Object) true zurück gibt, auch die HashCode-Methode den gleichen Wert liefern muß. Allerdings darf die HashCode-Methode auch den gleichen Wert bei Ungleichheit liefern. Beim Überschreiben ist ebenfalls darauf zu achten, daß man sich im Klaren ist, daß die Änderung von Membervariablen auch somit einen Einfluß auf den Rückgabewert der HashCode-Methode haben könnte. Das hat dann argen Einfluß auf die HashContainer der Java-Collections. Jeder HashContainer speichert jedes Objekt nach seinem HashCode in einer "Komode". Jeder gleiche HashCode hat dabei seine eigene "Schublade". Gleiche Objekte liegen bei richtiger Implementierung somit immer in einer "Schublade", die der Regel nach auch unterschiedliche Objekte beherbergen könnte. Je genauer die Berechnung des HashCodes, desto weniger Objekte je "Schublade", argo je eher wird ein Objekt "wiedergefunden", was die Performance steigert. Ziemlich dumm wäre somit generell z.B. 1 bei der HashCode-Methode zurückzugeben. Aufgrund dieser Vorgehensweise ist es natürlich stark ratsam, zuerst Objekte auf dem HashContainer zu entfernen, dann zu ändern und erneut im HashContainer abzuspeichern, anderenfalls kann es vorkommen, daß die Objekte nicht mehr gefunden werden!
Vergleiche zwischen Objekten nimmt man grundsätzlich mit Comparatoren vor (= Comparator-Interface) oder man macht die Objekte vergleichbar (= Comparable-Interface). Dazu ist die entsprechende Vergleichmethode korrekt zu implementieren. Das hat absolut nichts mit equals(Object) und Hash-Code zu tun! Dabei ist stets zu beachten, daß wenn Objekt a < b und b < c ist, auch a < c sein muß. Sonst gerät die Sortierung z.B. in den TreeContainern (TreeMap, TreeSet) durcheinander. Es sollte auch darauf geachtet werden, eine ClassCastException und eine NullPointerException zu werfen, falls man "Äpfel" mit "Birnen" oder "nichts" vergleichen will. Im Vergleich dazu darf eine equals- oder hashCode-Methode nie Exceptions werfen.