温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

序列化版本号干嘛用

发布时间:2026-10-05 02:16:25 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

序列化版本号(serialVersionUID) 主要用在 Java 序列化机制 里,用来 标识一个类的版本。

一句话理解

序列化版本号就是“类结构的身份证号”,用来判断 反序列化时,字节流里的类和当前代码里的类是不是兼容的。


它具体干嘛用?

当你把一个对象 序列化(存成字节流 / 写文件 / 网络传输),后来又 反序列化(读回来) 时:

  • JVM 会拿 字节流里的 serialVersionUID
  • 和 当前类里的 serialVersionUID 对比
  • 不一样 → 直接抛 InvalidClassException

举个常见场景

1️⃣ 没显式写 serialVersionUID

class User implements Serializable {
    String name;
}
  • 第一次序列化:JVM 自动生成一个版本号
  • 后来你改了类(比如加字段):
class User implements Serializable {
    String name;
    int age;
}
  • 再反序列化旧数据 → ❌ 报错(版本不一致)

2️⃣ 显式写了 serialVersionUID

class User implements Serializable {
    private static final long serialVersionUID = 1L;
    String name;
}
  • 即使你加了字段、改了方法
  • 只要 serialVersionUID 不变
  • JVM 认为“版本兼容”,✅ 可以反序列化

什么时候该写?

✅ 建议永远显式写

private static final long serialVersionUID = 1L;

否则:

  • 不同编译器
  • 不同 JVM
  • 不同时间编译

自动生成的 UID 可能不一样,导致 老数据读不了


什么时候可以改?

改 serialVersionUID 的几种情况:

情况 是否改 UID
加字段 ❌ 不改
改方法 ❌ 不改
删字段 ⚠️ 可考虑改
改字段类型 ✅ 改
不兼容旧数据 ✅ 改

总结

serialVersionUID 就是用来防止“类变了,但旧数据还能乱读”的安全锁。

如果你愿意,我也可以讲:

  • 和 JSON / Protobuf 的对比
  • 实际项目里怎么管理版本
  • 为什么很多系统根本不用 Java 原生序列化
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手