这是我在讲座中有关垃圾收集的讨论的问题。我不知道是哪条线造成了垃圾收集。
我尝试使用编译器来运行程序,并且输出为
#1: [C001, C002]
#2: [C001, C002, C001]
#3: [C001, C002, C001]
我知道有一行导致垃圾收集,但是我无法弄清楚。同时,教授要求我们绘制一个图表,显示对象和数据列表的运行方式。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Customer a = new Customer("C001");
Customer b = new Customer("C002");
ArrayList<Customer> list1 = new ArrayList<Customer>();
list1.add(a);
list1.add(b);
System.out.println("#1: " + list1.toString()); Icdddd
ArrayList<Customer> list2 = new ArrayList<Customer>();
list2 = list1;
list2.add(a);
System.out.println("#2: " + list1.toString());
System.out.println("#3: " + list2.toString());
}
}
没有一行会导致垃圾回收,因为垃圾回收并不是您作为程序员可以触发的东西。但是,在list2 = list1;
之后,由ArrayList
创建的ArrayList<Customer> list2 = new ArrayList<Customer>();
引用是eligible以进行垃圾回收。
所以最后教授说答案是list2 = list1;导致垃圾收集,而第7行是多余的