Ohne Spitzfindigkeiten, der Versuch, es "intuitiv verständlich" zu formulieren:
Eine Referenzvariable enthält die Speicheradresse
Zwei Objekte sind identisch, wenn sie die gleiche (oder dieselbe) Speicheradresse haben.
hachCode ist alles andere als eindeutig. Theoretisch dürfte man [c]public int hashCode() { return 0; }[/c] schreiben. Wäre unvorteilhaft, aber "erlaubt".
wenn du zwei Objekte miteinander vergleichen willst dann würde dein Ansatz ungefähr so ausschauen: Du musst die
Java:
Object.equals(Object obj);
Methode überladen. Es empfiehlt sich als erstes die null-safety zu gewährleisten (also falls obj == null -> false) und dann die Speicheradressen zu vergleichen, falls diese identisch sind ist klar, dass die Objekte gleich sind. Der Zweite sinnvolle Schritt wäre die Gleichheit
Java:
obj.getClass()!=this.getClass()
zu überprüfen. Falls die beiden Objekte unterschiedliche Klassen repräsentieren ist die sache klar. Anschliessend könntest du die Membervariablen miteinander vergleichen und falls diese gleich sind dann ist es klar, dass die Objekte identisch sind (Selbstverständlich kannst du zwei Objekte haben, die unterschiedliche Speicheradressen besitzen, aber trotzdem identisch sind). Wenn du Hashcode benutzen willst kannst du es noch raffinierter gestalten: einfach
Java:
hashCode()
definieren und im
Java:
equals()
benutzen.
Nehmen wir an du hast 2 Membervariablen die int sind, dann könnte deine hashCode()-Methode so ausschauen:
Hier ist allerdings Vorsicht geboten, hashcode solltest du nur benutzen wenn du feststellen willst, dass zwei Objekte NICHT identisch sind. Es kann durchaus vorkommen, dass zwei Objekte, die tatsächlich unterschiedlich sind denselben Hashcode haben, also vorsichtig damit