从 class A 的对象到 class B 的对象存在引用。如果 A 被序列化,我们是否可能会丢失 B 的对象?
A reference exist from an object of class A to an object of class B. If A is serialized, do we might lose the object from B?
我的问题很简单,真的:
假设我们有一个 class A,它的唯一字段是对来自 class B 的对象的引用:
private B b;.
假设只有 A 中的一个对象指向 b 的引用。
现在假设我们序列化了 A 对象。
所以现在,显然没有任何东西指向对象 b(类型 B)。请问garbage-collector might "kill" b?如果是这样 - 我们不是丢失了 A 的信息吗?
当反序列化时,A 是否仍然具有对 b 的合法引用?
对于这种令人困惑的情况,我将不胜感激。谢谢!
假设您的 class B
也实现了 Serializable
,序列化 A
的实例也会序列化其嵌套对象 b
.
b
引用的原始实例如果没有其他指向它和您的 A
的原始实例,将被垃圾收集。但是如果你反序列化A
,它也会反序列化嵌套的b
,在这个过程中创建一个A
和B
的新实例。
如果不希望b
在这里连载,需要将引用标记为transient
。反序列化 A
然后会将 null
分配给 b
.
我的问题很简单,真的:
假设我们有一个 class A,它的唯一字段是对来自 class B 的对象的引用:
private B b;.
假设只有 A 中的一个对象指向 b 的引用。
现在假设我们序列化了 A 对象。
所以现在,显然没有任何东西指向对象 b(类型 B)。请问garbage-collector might "kill" b?如果是这样 - 我们不是丢失了 A 的信息吗?
当反序列化时,A 是否仍然具有对 b 的合法引用?
对于这种令人困惑的情况,我将不胜感激。谢谢!
假设您的 class B
也实现了 Serializable
,序列化 A
的实例也会序列化其嵌套对象 b
.
b
引用的原始实例如果没有其他指向它和您的 A
的原始实例,将被垃圾收集。但是如果你反序列化A
,它也会反序列化嵌套的b
,在这个过程中创建一个A
和B
的新实例。
如果不希望b
在这里连载,需要将引用标记为transient
。反序列化 A
然后会将 null
分配给 b
.