我用相同的引用变量创建了3个对象,并将它们全部存储在数组中。当我打印这些引用变量时,它们都显示不同的地址。我被告知是否某个对象松散了它的引用变量GC将它从堆中删除,所以如何来同样的参考变量显示3个不同的位置,GC不起作用?实际上堆中有3个对象或同一个引用变量有3个内存地址
class MyClass {
public static void main(String[] args) {
MyClass[] i = new MyClass[3];
for (int j = 0; j <= 2; j++) {
MyClass p = new MyClass();
i[j] = p;
}
for (int k = 0; k <= 2; k++) {
System.out.println(i[k]);
}
}
}
输出:
[shadow@localhost String]$ javac MyClass.java
[shadow@localhost String]$ java MyClass
MyClass@138532dc
MyClass@dce1387
MyClass@54640b25
[shadow@localhost String]$
答案 0 :(得分:1)
您仍然可以引用数组中的对象,并且您可以在程序中引用该数组。 GC无法对这些对象采取行动。
有人告诉我,如果某个对象松动,它的引用变量GC会将其从堆中删除
如果没有对该对象的可访问引用,则会发生垃圾收集。
答案 1 :(得分:0)
你写了
有人告诉我,如果某个对象松动,它的引用变量GC会将其从堆中删除
如果某个对象丢失了所有其可从堆栈中获取的引用,而不仅仅是其中一个,则它只能从堆中删除它。通过保持对名为i
的数组中所有三个对象的引用,可以防止它们被垃圾回收。
答案 2 :(得分:0)
回答标题中的问题,因为你在循环中为它分配了三个连续的不同值。