gpt4 book ai didi

java - 不带L的serialVersionUID,xxxxxxxxxxxxxxxxxL与1L,正与负

转载 作者:行者123 更新时间:2023-12-02 02:39:16 24 4
gpt4 key购买 nike

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

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

  • serialVersionUID似乎分为2个“类型”。 19 个数字后跟 L xxxxxxxxxxxxxxxxxxxL 或 269L 或 1L。这些数字似乎不是任意选择的。如果我们只需要一个身份证,任何号码都行不通吗?这个设计背后的逻辑是什么。
  • 长度为 20 个字符 serialVersionUID它可以是正的,也可以是负的。有什么不同。再次如果 serialVersionUID是为了识别的目的,为什么需要负数呢?我们还没有用完所有的正数。
  • MirroredTypedException.java serialVersionUID如果没有 L 则为 269 。这是唯一的serialVersionUID我发现没有 L 。这是为什么? L是什么意思?

快照(此快照不包括所有内容)

enter image description here

最佳答案

serialVersionUID seems can be divide into 2 "type"

不是真的。它们都只是long

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

关于java - 不带L的serialVersionUID,xxxxxxxxxxxxxxxxxL与1L,正与负,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45761399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com