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

Oh *_*oon 5 java primitive serialization wrapper

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

例如,我有一个Person类

public class Person implements Serializable{
private int age;
}
Run Code Online (Sandbox Code Playgroud)

而不是

public class Person implements Serializable{
private Integer age;
}
Run Code Online (Sandbox Code Playgroud)

他们有什么不同?

Buh*_*ndi 6

我是用Java的序列化来说的:

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

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

private Integer value = 5;
Run Code Online (Sandbox Code Playgroud)

内部的值"包裹"(缺少更好的单词)Integer并存储整个对象.

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

transient private Integer value = 5;
Run Code Online (Sandbox Code Playgroud)

相关资源:


Thi*_*ilo 6

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

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

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

你想做什么?

  • 有人骗你了:-) (12认同)