首页 > 解决方案 > 存在从 A 类对象到 B 类对象的引用。如果 A 被序列化,我们是否会丢失 B 中的对象?

问题描述

我的问题很简单,真的:

假设我们有一个类 A,它的唯一字段是对 B 类对象的引用:

private B b;.

让我们假设只有一个来自 A 的对象指向 b 的引用。

现在假设我们序列化了 A 对象。

所以现在,显然没有任何东西指向对象 b(类型 B)。垃圾收集器会“杀死”b吗?如果确实如此 - 我们不是丢失了 A 的信息吗?

当 A 被反序列化时,它是否仍然具有对 b 的合法引用?

对于这种令人困惑的情况,我将不胜感激。谢谢!

标签: javaserializationreferencegarbage-collection

解决方案


假设你的类也B实现Serializable了,序列化的实例A也将序列化它的嵌套对象b

引用的原始实例b将被垃圾收集,如果没有其他东西指向它和您的原始实例A。但是如果你反序列A化,它也会反序列化嵌套的,在过程b中创建一个新的实例。AB

如果您不希望b在此处被序列化,则需要将引用标记为transient. 然后反序列化Anull分配给b.


推荐阅读