没有 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
好像分成了2个"type"。 19 个数字后跟 L xxxxxxxxxxxxxxxxxxxL 或 269L 或 1L。这些数字似乎不是随意选择的。如果我们只需要一个 ID,那么任何数字都不行吗?这个设计背后的逻辑是什么。
- 对于20个字符长
serialVersionUID
,它可以是正数也可以是负数。有什么不同。同样,如果 serialVersionUID
用于识别目的,为什么我们需要负数?我们还没有用完所有的正数。
- 在
MirroredTypedException.java
中 serialVersionUID
是没有 L
的 269。这是我发现的唯一没有 L
的 serialVersionUID
。这是为什么? L
是什么意思?
一个快照(这个快照不包括所有的)
serialVersionUID seems can be divide into 2 "type"
不是真的。他们都只是 long
s.
For the 20 characters long serialVersionUID it can be positive or negative.
这些都是随机选择的。如果你在Long.MIN_VALUE
和Long.MAX_VALUE
之间随机选择一个数字,那么大多数时候它会有19位数字,一半的时候它会是负数。
有时它们可能是从某些东西的散列中生成的(例如源代码、xml 定义等)。如果散列函数好的话,那么数字的分布就和随机选择一样了。
Why is that? What is the meaning of L?
L
identifies a literal of type long
。 269
不需要它,因为它适合 int
的范围,并且会自动向上转换为 long
.
我读了What is a serialVersionUID and why should I use it? and static final long serialVersionUID = 1L。从这两个 SO 帖子中,我大致了解它是什么。它是 Serializable class 的 ID,用于在反序列化期间检查发送方和接收方是否兼容。如果不是,则抛出 InvalidClassException
。
但是我对一些事情很好奇:
serialVersionUID
好像分成了2个"type"。 19 个数字后跟 L xxxxxxxxxxxxxxxxxxxL 或 269L 或 1L。这些数字似乎不是随意选择的。如果我们只需要一个 ID,那么任何数字都不行吗?这个设计背后的逻辑是什么。- 对于20个字符长
serialVersionUID
,它可以是正数也可以是负数。有什么不同。同样,如果serialVersionUID
用于识别目的,为什么我们需要负数?我们还没有用完所有的正数。 - 在
MirroredTypedException.java
中serialVersionUID
是没有L
的 269。这是我发现的唯一没有L
的serialVersionUID
。这是为什么?L
是什么意思?
一个快照(这个快照不包括所有的)
serialVersionUID seems can be divide into 2 "type"
不是真的。他们都只是 long
s.
For the 20 characters long serialVersionUID it can be positive or negative.
这些都是随机选择的。如果你在Long.MIN_VALUE
和Long.MAX_VALUE
之间随机选择一个数字,那么大多数时候它会有19位数字,一半的时候它会是负数。
有时它们可能是从某些东西的散列中生成的(例如源代码、xml 定义等)。如果散列函数好的话,那么数字的分布就和随机选择一样了。
Why is that? What is the meaning of L?
L
identifies a literal of type long
。 269
不需要它,因为它适合 int
的范围,并且会自动向上转换为 long
.