如果将成员数据声明为原始数据类型,如果将对象声明为可序列化,那么值是否会被序列化?

时间:2011-06-13 06:40:24

标签: java serialization wrapper primitive

我有一个问题是,使用原始数据类型而不是它们的包装计数器部分对它们的序列化是否有任何应有的影响?

例如,我有一个人类

public class Person implements Serializable{
private int age;
}

而不是

public class Person implements Serializable{
private Integer age;
}

他们有什么不同?

2 个答案:

答案 0 :(得分:6)

那么,确切的序列化格式会略有不同(只是32位与包含32位和标题的序列化Integer对象),但两者都将被序列化和反序列化。

  

如果将成员数据声明为原始数据类型,如果将对象声明为可序列化,是否会序列化值?

是的,未标记为transient的所有内容都将被序列化,包括基元。

你想做什么?

答案 1 :(得分:5)

我说的是Java的序列化:

虽然int是基本类型,它只存储变量的值(二进制),但Integer对象(使用ObjectOutputStream)将存储一些“元数据”,发生反序列化时,它将看到Integer对象。

是的,序列化不仅存储对象,还存储对象的状态,因此如果存储,

private Integer value = 5;

Integer内的值被“包裹”(缺少更好的单词)并存储整个对象。

添加注释:为了来存储对象/变量,请使用transient标记字段,.e.g

transient private Integer value = 5;

相关资源: