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

Vic*_*tor 5 java serialization hashcode

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

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

use*_*421 5

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


use*_*407 2

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

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