Java编程和垃圾回收

问题描述 投票:0回答:2

这是我在讲座中有关垃圾收集的讨论的问题。我不知道是哪条线造成了垃圾收集。

我尝试使用编译器来运行程序,并且输出为

#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()); 
    }

}
java class object
2个回答
3
投票

没有一行会导致垃圾回收,因为垃圾回收并不是您作为程序员可以触发的东西。但是,在list2 = list1;之后,由ArrayList创建的ArrayList<Customer> list2 = new ArrayList<Customer>();引用是eligible以进行垃圾回收。


0
投票

所以最后教授说答案是list2 = list1;导致垃圾收集,而第7行是多余的

© www.soinside.com 2019 - 2024. All rights reserved.