没有 L 的 serialVersionUID,xxxxxxxxxxxxxxxxxL 对 1L,正对负

serialVersionUID without L, xxxxxxxxxxxxxxxxxL vs 1L, positive vs negative

我读了What is a serialVersionUID and why should I use it? and static final long serialVersionUID = 1L。从这两个 SO 帖子中,我大致了解它是什么。它是 Serializable class 的 ID,用于在反序列化期间检查发送方和接收方是否兼容。如果不是,则抛出 InvalidClassException

但是我对一些事情很好奇:

一个快照(这个快照不包括所有的)

serialVersionUID seems can be divide into 2 "type"

不是真的。他们都只是 longs.

For the 20 characters long serialVersionUID it can be positive or negative.

这些都是随机选择的。如果你在Long.MIN_VALUELong.MAX_VALUE之间随机选择一个数字,那么大多数时候它会有19位数字,一半的时候它会是负数。

有时它们可​​能是从某些东西的散列中生成的(例如源代码、xml 定义等)。如果散列函数好的话,那么数字的分布就和随机选择一样了。

Why is that? What is the meaning of L?

L identifies a literal of type long269 不需要它,因为它适合 int 的范围,并且会自动向上转换为 long.