我对 java 中的 PhantomReference 有点困惑。当我查看在线文章时,他们中的大多数都提到 PhantomReference 对象在创建后将返回 null 即使我们在引用上调用 get() 并且它还提到当 PhantomReference 被删除时,对象是幻影可访问的将被插入到 ReferenceQueue 中记忆。
我已经尝试了以下代码示例,但我对结果感到困惑。
Equipment equipment = new Equipment();
ReferenceQueue queue = new ReferenceQueue();
PhantomReference pr = new PhantomReference(equipment, queue);
System.out.println(pr.get());
System.out.println(queue.poll());
以上两个语句打印空。如果 pr.get() 返回 null 是否意味着 pr 引用的对象被垃圾收集?如果是这样,为什么对象仍未添加到优先级队列中?
任何人都可以帮助我澄清这一点。如果我对 PhantomReference 和 ReferenceQueue 的理解有误,我向您道歉。
请简单描述这两个术语
多谢