serialVersionUID 是 Java 序列化機制中的版本標識,用於確保反序列化時類版本兼容性。本文深度解析兩種生成方式的本質區別,並給出實戰選擇建議。
序列化運行時通過比較流中的 serialVersionUID 與當前類的 serialVersionUID 判斷是否兼容。不一致則拋出 InvalidClassException。
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = -7583924123567890123L;
| 選項 | 英文描述 | 中文解讀 |
|---|---|---|
| Add default serial version ID | Adds a default serial version ID... if the type did undergo structural change since its first release. | 類結構已變更,需手動維護兼容性時選擇(生成 1L) |
| Add generated serial version ID | Adds a generated serial version ID... if the type did not undergo structural change since its first release. | 類結構未變更,或希望任何變更都強制不兼容時選擇(生成哈希值) |
JDK 文檔未強制規定生成方式,關鍵在於同一個類的不同版本之間是否保持一致。跨類之間的 serialVersionUID 無任何關聯性。
serialVersionUIDserialver 工具查看已編譯類的自動生成值