Java serialVersionUID 有什么作用?

我们都知道对象要序列化和反序列化要实现Serializable接口,但是仅仅知道这一点似乎还少了一点,那就是serialVersionUID要不要声明。

有时候我们似乎不声明serialVersionUID也不会报错,但是有时候又会莫名其妙的收到InvalidClassException错误。似乎我们有必要来了解一下serialVersionUID的作用到底是什么了。

在没有显示声明serialVersionUID的时候,Java编译器会给我们生成一个默认的serialVersionUID,并且这个生成也会遵循一定的规范。但是不同的Java编译器可能会生成不同的serialVersionUID,所以在反序列化的时候就会收到InvalidClassException的错误。

所以为了避免因Java编译器不同导致反序列化失败的问题,最好还是要显示的声明一下serialVersionUID。这个serialVersionUID就是标明对象的版本的,如果版本号不对,Java将不会对其进行反序列化。

所以这就能解释之前我在idea中启动项目把Redis中的一个缓存对象读出来反序列化为Java对象时为什么报错了。因为生成这个缓存对象的jdk和我本地的jdk不一样,导致默认生成的serialVersionUID也不一样,这就产生了InvalidClassException错误了。我把类显示声明一下serialVersionUID就好了。


Java serialVersionUID 有什么作用?
https://www.chuckfang.com/2020/10/09/What-does-the-Java-serialVersionUID-do/
作者
方程
发布于
2020年10月9日
许可协议