从 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,在这个过程中创建一个AB的新实例。

如果不希望b在这里连载,需要将引用标记为transient。反序列化 A 然后会将 null 分配给 b.