一、同一个Java Bean
一个Java Bean序列化时状态以“A”指代,反序列化时状态以“B”指代,那么存在如下兼容性描述:
- 如果A和B的
serialVersionUID
字段值不一致,那么反序列化“序列化A生成的字节流”尝试获取B时失败,抛出java.io.InvalidClassException
异常 - 如果A和B的
serialVersionUID
字段值一致,那么B相对于A增加或者减少字段,都不影响反序列化“序列化A生成的字节流”尝试获取B时的成功
二、不同Java Bean
不同的两个Java Bean “C”和“D”(包括“类名不同”和“类名相同,所在包路径不同”),无论其中的“serialVersionUID”字段值是否一致,反序列化“序列化C生成的字节流”尝试获取D时失败,抛出java.lang.ClassCastException
异常
三、有序列表或者数组中的元素顺序保持不变
对于有序列表或者数组,经过序列化和反序列化后,有序列表或者数组中的元素顺序保持不变。