1L serialVersionUID 是什么意思?我什么时候可以使用这个默认值 1L?

新手上路,请多包涵

有 3 种方式来定义 serialVersionUID :

 1. private static final long serialVersionUID = 1L; (Default)
2. private static final long serialVersionUID = -8940196742313994740L; (Generated)
3. Don't define serialVersionUID and let the JVM define it at runtime. @Lance Java

但是我不明白第一种方式!

我已经看到有人为源代码中的所有 java 类定义了“serialVersionUID=1L”。

什么意思?那有用吗?

如果所有类的serialVersionUID都是1L,是不是就没有问题了?

原文由 Ying Style 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 654
1 个回答

什么意思?那有用吗?

是的。 serialVersionUID 的要点是让程序员控制类的哪些版本在序列化方面被认为是不兼容的。只要 serialVersionUID 保持不变,序列化机制就会尽最大努力翻译序列化实例,这可能不是您想要的。如果您进行语义更改导致旧版本不兼容,则可以更改 serialVersionUID 以使反序列化旧实例失败。

如果所有类的serialVersionUID都是1L,是不是就没有问题了?

否 - serialVersionUID 是 每个类 的。

原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题