1L的Java SerialVersionUid是否正常?还是说它必须是独一无二的?

1L的Java SerialVersionUid是否正常?还是说它必须是独一无二的?,java,serialization,serialversionuid,Java,Serialization,Serialversionuid,我有两个实现可序列化的java类。我将它们都设置为serialVersionUid为1L 一位同事说,所有类都必须有一个唯一的串行版本uid,如果类具有相同的串行版本uid,jvm将平等对待它们。我认为等式是基于equals方法的结果,而不是串行版本 据我所知,串行版本uid用于指示类的版本,并且当类以不兼容的方式更改时,串行verison uid应该递增 对吗?可以使用1的serialversion uid吗?或者java类永远不应该有1L的serialversion uid吗?类名是对象的序

我有两个实现可序列化的java类。我将它们都设置为serialVersionUid为1L

一位同事说,所有类都必须有一个唯一的串行版本uid,如果类具有相同的串行版本uid,jvm将平等对待它们。我认为等式是基于equals方法的结果,而不是串行版本

据我所知,串行版本uid用于指示类的版本,并且当类以不兼容的方式更改时,串行verison uid应该递增


对吗?可以使用1的serialversion uid吗?或者java类永远不应该有1L的serialversion uid吗?

类名是对象的序列化表示的一部分。serialVersionUID仅用于对类进行版本控制。所以1L是一个有效值

请注意,如果您不打算在演化类时保持序列化的兼容性,serialVersionUID是无用的,您可以忽略它。当您希望对类进行兼容更改,并且仍然能够读取使用较旧版本的类序列化的对象(反之亦然)时,拥有serialVersionUID非常有用。但这需要极度谨慎,而且绝非易事。通常应避免使用序列化进行长期存储。如果用于网络目的,则为客户端和服务器使用相同的类(即同时部署两者)是最简单的策略


还请注意,您可以通过简单地序列化和反序列化两个不同类的对象来证明您的同事是错的,这两个类的值(1L)都与serialVersionUID相同。如果他的理论是正确的,JVM将无法知道如何反序列化对象。

可能的不同之处在于,我特别想知道1L是否是可接受的串行版本uid(而不是是否需要serialverionuid)。也许另一种表达我的问题的方式是“串行版本uid是否需要是唯一的?”你试过阅读这些答案吗?我向你保证,如果你读了那篇文章,你的问题就会得到回答。我的另一位同事读了答案,意思是1L不是一个允许的值,我读了它,表明它是。你的另一位同事在做梦。没有任何东西表明
1L
是非法值。只有一个答案提到了这一点
serialVersionUID
是一个
长字符串,
并且允许任何值。