gpt4 book ai didi

序列化后Java哈希码发生变化

转载 作者:行者123 更新时间:2023-12-01 09:14:46 25 4
gpt4 key购买 nike

我正在使用 java 序列化将对象保存到文件中。由于我使用 hashCode() 来检查对象是否更改(我知道,我知道可能会发生哈希冲突),从内存加载对象后,对象的哈希码是否会更改(对象保存在内存中之前的哈希码是否可以更改)与我从内存加载后得到的不同)?

我问这个问题是因为如果我的对象有一个指向另一个对象的变量 _myOtherObject,那么在我从内存加载它之后,_myOtherObject 可能会存储在不同的内存地址中,这将使 _myOtherObject 的值发生变化,这将导致使我从内存加载的对象的哈希码发生变化。我的想法对吗?

谢谢。

最佳答案

这取决于哈希码的计算方式。但如果计算涉及使用Object.hashCode()System.identityHashCode(Object),那么它可能会改变。

这些哈希值基于对象标识和对象引用 == 语义。反序列化的对象将具有与原始对象不同的标识,并且不会 == 。因此,哈希码可能(并且可能会)不同。

<小时/>

第二个问题是,如果您使用不同版本的类(包括不同版本的库类)进行序列化和反序列化,则可能会导致不同的哈希码,无论上述身份问题如何。在大多数情况下,计算库类中的哈希码的算法不是 API 规范的一部分/

关于序列化后Java哈希码发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com