相同已安装Java版本的相同serialversionUID

相同已安装Java版本的相同serialversionUID,java,serialization,Java,Serialization,我有一个简单的问题,谷歌搜索并没有很好地解决: 如果我在不同的计算机上安装相同的Java二进制文件,它们的serialversionUID会保持不变吗?如果没有,那么除了显式更改之外,它们是否存在serialversionUID不同的机制?谢谢你的解释。 (这是一个指向生成UID的算法的链接:)是的,因为SerialVersionUID只是一个设置为静态值的成员变量,并且在将它们放在第一台机器和第二台机器之间没有重新编译二进制文件 它是序列化/反序列化体系结构,在运行时与SerialVersio

我有一个简单的问题,谷歌搜索并没有很好地解决: 如果我在不同的计算机上安装相同的Java二进制文件,它们的serialversionUID会保持不变吗?如果没有,那么除了显式更改之外,它们是否存在serialversionUID不同的机制?谢谢你的解释。
(这是一个指向生成UID的算法的链接:)

是的,因为SerialVersionUID只是一个设置为静态值的成员变量,并且在将它们放在第一台机器和第二台机器之间没有重新编译二进制文件

它是序列化/反序列化体系结构,在运行时与SerialVersionUID有关。如果使用serialVersionUID修改类的源代码,则应检查该类与未修改版本的序列化兼容性,如果不兼容,则将SerialVerisUID调整为该类尚未使用的值。

流唯一标识符是类名、接口类名、方法和字段的64位哈希
如果您没有更改类代码,它应该是完全相同的。

否则很多功能都会失败,比如在一台机器中序列化对象,在另一台机器中反序列化(比如使用JMS for exmaple)您是否在源代码中声明了serialVersionUID,还是依赖编译器来生成它?@Dev我说的是编译器生成的UIDi如果未设置显式serialVersionUID,JVM将在运行时生成一个,而不是compiletime@MarkRotteveel,你的观点很好。但是,序列化有什么意义吗(或功能)生成必须产生与非重新编译类类似的结果(除非Java有一天变得疯狂并想要破坏向后兼容性)。这是真的,但是你需要自己指定它。据我所知,如果没有显式设置,则计算它的算法依赖于JVM(或者至少它没有在JLS或JVM规范中指定),因此不同JVM供应商之间可能会有所不同。@MarkrotVeel,如果Java CTT没有有效地实施类似的算法,我会感到震惊。事实上,如果不使用“兼容”算法,这样的项目会有明确的警告。