2016-11-16 3 views
0

Ich benutze Java-Serialisierung, um Objekte in Dateien zu speichern. Da ich hashCode() verwende, um zu überprüfen, ob sich die Objekte geändert haben (ich weiß, dass Hash-Kollisionen auftreten können), kann sich der Hashcode eines Objekts ändern, nachdem ich es aus dem Speicher geladen habe (kann den HashCode des Objekts vor dem Speichern im Speicher haben) anders sein als der, den ich bekomme, nachdem ich es aus dem Speicher geladen habe)?Java Hashcode Änderung nach der Serialisierung

ich dies zu fragen, denn wenn mein Objekt hat eine variable _myOtherObject, die auf ein anderes Objekt verweist, nachdem ich es aus dem Speicher laden die _myOtherObject wird wahrscheinlich in einer anderen Speicheradresse gespeichert werden, und das wird den Wert von _myOtherObject Änderung vornehmen und dass wird den Hashcode des Objekts ändern, das ich aus dem Speicher geladen habe. Ist mein Denken richtig?

Danke.

+1

Es hängt davon ab, wie Sie den Hashcode in Ihrem Objekt berechnen. Kannst du deinen Code posten? –

+0

Zu Ihrer letzten Frage lautet die Antwort immer noch "es kommt darauf an, wie Sie den Hash-Code berechnen". Es könnte sich ändern, aber nicht unbedingt. –

Antwort

1

Es hängt davon ab, wie der Hashcode berechnet wird. Aber wenn die Berechnung Object.hashCode() oder System.identityHashCode(Object) verwendet, dann wird es wahrscheinlich ändern.

Diese Hashes basieren auf Objektidentität und Objektreferenz == Semantik. Das deserialisierte Objekt hat eine andere Identität als das ursprüngliche und wird nicht == sein. Daher könnte (und wird wahrscheinlich) der Hashcode anders sein.


Ein zweites Problem ist, dass, wenn Sie serialisieren und deserialisieren mit verschiedenen Versionen von Klassen (einschließlich verschiedenen Versionen von Bibliotheksklassen), die oben in verschiedenen Hashcodes unabhängig der Identität Problems führen könnten. In meisten Fällen ist der Algorithmus zum Berechnen eines Hashcodes in einer Bibliotheksklasse nicht Teil der API-Spezifikation/

Verwandte Themen