我正在使用java序列化将对象保存到文件中。由于我使用hashCode()来检查对象是否发生了变化(我知道,我知道可能发生哈希冲突),从内存加载后,对象的哈希码会发生变化(对象的hashCode可以保存在内存中之前)从我从内存中加载它后会得到的不同吗?
我问这个是因为如果我的对象有一个指向另一个对象的变量_myOtherObject,在我从内存中加载后,_myOtherObject可能会存储在不同的内存地址中,这将使_myOtherObject的值发生变化使我从内存加载的对象的哈希码发生变化。我的想法是对的吗?
感谢。
答案 0 :(得分:1)
这取决于如何计算哈希码。但如果计算涉及使用Object.hashCode()
或System.identityHashCode(Object)
,那么它可能会改变。
这些哈希基于对象标识和对象引用==
语义。反序列化的对象将具有与原始对象不同的标识,并且不会==
。因此,哈希码可能(并且可能会)不同。
第二个问题是,如果使用不同版本的类(包括不同版本的库类)对其进行序列化和反序列化,则可能导致上述身份问题的与无关。在大多数情况下,用于计算库类中的哈希码的算法不是API规范的一部分/