在下面的代码中,执行第7行后有多少对象符合垃圾回收的条件?在我看来,1个z对象是合格的.是对的吗?
public class Tester
{
public static void main(String[] args)
{
Integer x = new Integer(3000);
Integer y = new Integer(4000);
Integer z = new Integer(5000);
Object a = x;
x = y;
y = z;
z = null; //line 7
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢你.
不要将引用与对象混淆.对象是已创建的实际项目,引用只是引用它的名称.
你创建了三个对象,让我们调用它们3000,4000然后5000.您还设置了如下引用:
Ref Object
--- ------
x -> 3000
y -> 4000
z -> 5000
Run Code Online (Sandbox Code Playgroud)
完成作业后,您最终得到:
Ref Object
--- ------
a -> 3000
x -> 4000
y -> 5000
z
Run Code Online (Sandbox Code Playgroud)
因此,没有任何对象受到垃圾收集.每一个人都有一个参考.
相比之下,如果您要删除该行:
Object a = x;
Run Code Online (Sandbox Code Playgroud)
那么分配将导致:
Ref Object
--- ------
3000
x -> 4000
y -> 5000
z
Run Code Online (Sandbox Code Playgroud)
我们调用的对象3000有资格进行垃圾回收,因为您不再有任何方法可以访问它.
而且,顺便说一句,你可能想要考虑这样一个事实,即创建自动垃圾收集的一个主要原因是使这些问题没有实际意义:-)一般来说(虽然当然有例外),你不应该需要担心哪些对象可以收集.
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |