根据 docs :
The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization.
如果serialVersionUID只是为了验证序列化对象的发送者和接收者是否已经加载了该对象的类,那么jvm就不能使用类名本身来进行验证。
最佳答案
您错过了引文的后半部分:
that are compatible with respect to serialization
如果您想要序列化类对象的多个“版本”,您需要一个可以更改的标识符。您不能仅通过传递类名来做到这一点。
打个比方,这有点像说为什么我们需要传入 HTTP 版本(HTTP/1.1
),因为它到底是 HTTP。这是由协议(protocol)“版本”以及协议(protocol)本身决定的。
关于java - 为什么jvm生成serialVersionUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807221/