java对象在通过网络传输时是否保留哈希码值

时间:2013-10-28 02:46:43

标签: java serialization hashcode

如果我有一个可序列化的java对象,其中hashcode方法没有被覆盖,然后我通过netwrok和接收端传输java对象,重构java对象,那么hashcode方法会返回相同的值吗? / p>

它是由Java API指定的还是基于JVM依赖的实现?

4 个答案:

答案 0 :(得分:5)

Java语言规范,Java虚拟机规范或对象序列化规范中没有任何内容可以这样说。因此,无论在任何特定情况下您可能会发生什么行为,您都不能依赖它。

答案 1 :(得分:2)

这取决于,正如其他人所说,如果你依赖于瞬态字段,那么哈希码的值会有所不同,但它也取决于你的哈希码的实现方式。如果你的hashcode方法依赖于使用瞬态对象或默认方法的对象的哈希码(或者它本身依赖于使用那些对象的对象),那么哈希码可能最终会有所不同。

虽然标准没有指定,但是对象的默认哈希码通常只返回它们的内部地址,这显然会有所不同,具体取决于运行jvm的机器.....总的来说,我不会依赖任何哈希码在序列化/反序列化后,您无法控制返回相同内容的方法

答案 2 :(得分:0)

在序列化过程中,某些fieds可能不会被严重删除,例如瞬态字段。在这种情况下,序列化对象的哈希码将与原始对象不同。

答案 3 :(得分:0)

如果我们依赖于Object类hashCode方法,我们将在所有情况下在deserilized对象和原始对象之间获得hashCode的区别。你可以通过将任何用户对象serailizing到文件来测试它。