serialVersionUID = 1L 的作用

2,989 阅读1分钟

1.serialVersionUID

serialVersionUID用作Serializable类中的版本控件。
如果您没有显式声明serialVersionUID,JVM将根据您的Serializable类的各个方面自动为您执行此操作。

2.序列化和反序列化

序列化:指将对象转换为字节序列的过程,也就是将对象的信息转换成文件保存。
反序列化:将字节序列转换成目标对象的过程,也就是读取文件,并转换为对象。

2.不设置serialVersionUID会导致什么问题?

JVM将根据您的Serializable类,在类进行序列化的时候 自动生成serialVersionUID,
那么在序列化完毕后,如果我们在反序列化之前对类的方法或者属性进行了修改的话,在反序列化的时候就会报错。


总结:序列化和反序列化必须保证serialVersionUID的一致性

3.serialVersionUID = 1L 的作用

private static final long serialVersionUID = 1L;



如果在序列化后,反序列化前,更改了类的属性或者方法,只要显式的指定了serialVersionUID的值,
那么在反序列化的过程中不会报错,只是反序列化出来的类中,我们反序列化前添加的属性,属性值为0;

总结:

在类中显式声明serialVersionUID = 1L 后,即便更改类属性,反序列化也不会出现异常报错,
只是新更改的属性或者新添加的属性不会在反序列化的时候读取到而已。