为了账号安全,请及时绑定邮箱和手机立即绑定

serialVersionUID 全部设为1L 会有什么问题吗?

serialVersionUID 全部设为1L 会有什么问题吗?

明月笑刀无情 2018-07-14 09:40:13
很多地方都使用默认的:private static final long serialVersionUID = 1L; serialVersionUID都为1L,会不会有什么问题?以下是问题补充:类被修改后,没有修改serialVersionUID的值,出错? 不同的虚拟机,serialVersionUID的值不同,出错? 能说说通俗点(好理解点)的原因吗?
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

一般不会有问题,即使有序列化的情况下一般也不会有问题。所有类用一个值一般也没什么问题的,他是区分同一个类的不同版本,在序列化和反序列化的时候会用到

查看完整回答
1 反对 回复 2018-07-14
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

实现java.io.Serializable这个接口是为序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。

这样,即使某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化。否则,如果不显式定义该属性,这个属性值将由JVM根据类的相关信息计算,而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容而失败。

不显式定义这个属性值的另一个坏处是,不利于程序在不同的JVM之间的移植。因为不同的编译器实现该属性值的计算策略可能不同,从而造成虽然类没有改变,但是因为JVM不同,出现因类版本不兼容而无法正确反序列化的现象出现


查看完整回答
反对 回复 2018-07-14
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

没有设置serialVersionUID,因为修改后反序列化得到的类,与修改前不一致,而缺乏序列化,导致失败。

设置serialVersionUID后,它就会将不一样的field以type的预设值Deserialize.这个可以避开不兼容性的问题


查看完整回答
反对 回复 2018-07-14
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

问题大了。。。。。。。建议用随机值,而且每个类随机生成一次后,以后改类了也不要改这个值。这个涉及到序列化的一些问题,如果没有这个值,那更是要不得的。所有类都用同一个值也有问题哈。

查看完整回答
反对 回复 2018-07-14
  • 3 回答
  • 0 关注
  • 16605 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信