我在这里为一个概念而苦苦挣扎,而不是一段特定的代码。我觉得我被误导了,我正在努力解决这个问题。
这是一些示例代码:
List myList = new ArrayList<String>();
for (int i=1; i<11; i++) {
Foo myObject = new Foo();
myList.add(myObject.Bar)
}
有人告诉我,因为myList
包含对它的全部引用,myObject.Bar
所以在超出范围myObject
之前将不符合 GC的条件。myList
有人告诉我,如果我这样做了
List myList = new ArrayList<String>();
for (int i=1; i<11; i++) {
Foo myObject = new Foo();
myList.add(new String(myObject.Bar))
}
相反,myObject
它有资格获得 GC,因为它没有被“强烈引用”。
好像不太对,谁能给我解释一下?
请随时更正我的术语,Java 不是我的第一语言。