Test t1 = new Test();
Test t2 = t1;
t1 = null;
t2会发生什么?该对象是垃圾收集吗?
答案 0 :(得分:4)
如果在将t2分配给t1
时设置t1 = null会发生什么
标题中存在混淆:t2
未已分配给t1
。这一行:
Test t2 = t1;
将t1
中的值复制到t2
。没有正在进行的链接(除了它们具有相同的值,在这种情况下是一个称为对象引用的东西,告诉JVM在内存中找到对象的位置)。
在处理这些问题时,我喜欢一些ASCII艺术:
该行
Test t1 = new Test();
在内存中给我们这个:
+----------+ | t1 |---+ +----------+ | +-------------+ +-->| Test object | +-------------+
然后行:
Test t2 = t1;
告诉我们:
+----------+ | t1 |---+ +----------+ | +-------------+ +-->| Test object | +----------+ | +-------------+ | t2 |---+ +----------+
然后
t1 = null;
给我们:
+----------+ | t1: null | +----------+ +-------------+ +-->| Test object | +----------+ | +-------------+ | t2 |---+ +----------+
t2
完全不受您对t1
的攻击的影响。
答案 1 :(得分:3)
t2
没有任何反应。它仍然引用最初由Test
和t1
引用的同一t2
实例,只要该引用存在,此实例就不能被垃圾回收。 / p>