Java 关于 ArrayList.clear() 与 null

2019-01-01  本文已影响0人  Little丶Jerry
问:简单解释下你对 ArrayList.clear() 与 null 及 new ArrayList<E>() 赋值方式的理解?

答:

ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("1");
list.add("2");
list.clear();

上面的方式其实是因为 ArrayList 对象内部维护了一个对象数组 elementData,当执行 clear() 方法时,会执行循环将 elementData 中每一个元素都设置为 null,并设置数组的 size 为 0,是对 ArrayList 容器的一种清空释放,但是 ArrayList 对象还在。

ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("1");
list.add("2");
list = null;

上面的方式直接将变量 list 指向 null,通常当我们不需要再使用 ArrayList 对象时可以将变量值设为 null,以便 GC 可以运作并回收这部分内存空间。不过,需要注意的是当:仍有其他变量指向该对象时,即使讲变量 list 置为 null,垃圾回收器也无法回收该内存空间。如下:

ArrayList<String> list = new ArrayList<String>();
ArrayList<String> arraylist = list;
list.add("0");
list.add("1");
list.add("2");
list = null; // 此时list变量指向null,而arraylist变量仍然指向原内存空间,原内存空间得不到释放

本文参考自 关于 ArrayList.clear() 与 null 及 new ArrayList<E>() 的一道笔试题

上一篇 下一篇

猜你喜欢

热点阅读