java - 存在从 A 类对象到 B 类对象的引用。如果 A 被序列化,我们是否会丢失 B 中的对象?
问题描述
我的问题很简单,真的:
假设我们有一个类 A,它的唯一字段是对 B 类对象的引用:
private B b;.
让我们假设只有一个来自 A 的对象指向 b 的引用。
现在假设我们序列化了 A 对象。
所以现在,显然没有任何东西指向对象 b(类型 B)。垃圾收集器会“杀死”b吗?如果确实如此 - 我们不是丢失了 A 的信息吗?
当 A 被反序列化时,它是否仍然具有对 b 的合法引用?
对于这种令人困惑的情况,我将不胜感激。谢谢!
解决方案
假设你的类也B
实现Serializable
了,序列化的实例A
也将序列化它的嵌套对象b
。
引用的原始实例b
将被垃圾收集,如果没有其他东西指向它和您的原始实例A
。但是如果你反序列A
化,它也会反序列化嵌套的,在过程b
中创建一个新的实例。A
B
如果您不希望b
在此处被序列化,则需要将引用标记为transient
. 然后反序列化A
将null
分配给b
.
推荐阅读
- docker - Escape $ in variable passed to docker run command
- email - Is SES the only way to send email from Lambda?
- regex - 如何从 URL 中提取文件名?
- python - 泡菜坚持
- javascript - 为什么当参数之一拒绝时 promise.race 不返回?
- c# - UnauthorizedAccessException,如何忽略并保持程序运行?
- python - 简单解释一下python unstack()
- sql-server - SQL让没有大前锋的球队
- python - 比较两列(在两个文件中),然后打印相似的行和不同的行
- java - 每当我尝试从我的 GUI 访问我的 sql 数据库时,我都会收到错误消息