java - ArrayList.clear() 是否会递归地使所有对象无效?

标签 java arraylist

假设我有一个类:

class C
{
   int a, b;
   ArrayList<int> c = new ArrayList();
};

还有这样一个集合:

ArrayList<ArrayList<C>> MyList = new ArrayList<ArrayList<C>>();

调用 MyList.clear() 是否会使对 MyList 中每个 ArrayList 的所有引用以及 MyList 中每个 ArrayList 内的任何其他对象无效?那么,更准确地说,类 C.c 中的所有元素以及 C.a 和 C.b 都会被取消吗?

最佳答案

不,但如果没有其他东西引用它们,它们有资格进行垃圾回收。

例如,更简单的示例:

class Foo {
    Date dt;

    Foo() {
        this.dt = new Date();
    }
}

ArrayList<Foo> list = new ArrayList<Foo>();
list.add(new Foo());
list.clear();

截至clearFoo对象的dt尚未被“nulled”或任何东西,但Foo code> 对象以及仅它引用的事物(在本例中为其中的 Date)有资格进行垃圾回收。

鉴于:

class Foo {
    Date dt;

    Foo() {
        dt = new Date();
    }
}

ArrayList<Foo> list = new ArrayList<Foo>();
Foo f = new Foo();
list.add(f);
list.clear();

这里,Foo 对象符合垃圾回收条件,因为 f 仍然引用它,即使列表不。当然,如果 f 是方法中的局部变量,那么一旦该方法返回,f 就会超出范围 - 此时,如果没有其他任何东西具有对象的引用,它有资格进行GC。但这不是重点,重点是当 clear 完成时,该对象仍然被引用(通过 f)。

关于java - ArrayList.clear() 是否会递归地使所有对象无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722198/

相关文章:

javascript - 如何使用一些运算符组合两个数组?

java - 调用 arraylist 的 remove(int) 方法从所有类似的 arraylists 中删除该项目

java - 如何在一行中获取由 ArrayList<Object> 的 .toString() 调用组成的 String[]

java - 如何优化 JPQ JOIN 查询以运行得更快

java - 我与 Kafka 中的 SourceRecords 有什么关系

java - Bukkit - 将玩家的库存转换为 JSON

javascript - 如何从具有重复键值的 JSON 数组中删除 JSON

java - 如何每次使用 while 循环延迟更新 jLabel

Java Hashset 返回 false 而不是 true

Java Arraylist 处理元素