我在ThisClass
中有以下代码:
static ArrayList<MyClass> classlist;
如果我打电话:
ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);
然后再次拨打这一行:
ThisClass.classlist = new ArrayList<MyClass>();
它会重置ThisClass.classlist
列表,即类列表列表将不再包含对象吗?
答案 0 :(得分:23)
以下是插图:
ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);
结果如下:
ThisClass.classlist = new ArrayList<MyClass>();
结果 - 你通过指向一个新对象来重置它:
要使其“不再包含对象”,您应该做的是:
ThisClass.classlist.clear();
清除所有元素的循环并使它们 null 。在内部,ArrayList也指向其对象的内存地址,但为简单起见,只要认为它们在调用此方法时被“删除”。
如果你想让它“不再包含ArrayList”,你可以:
ThisClass.classlist = null;
这意味着:
另外,请注意您的问题标题提到“静态ArrayList”。 static
在这方面无关紧要。无论对象是否为静态,问题的结果都是相同的。
答案 1 :(得分:4)
调用
ThisClass.classlist = new ArrayList<MyClass>();
会清除ThisClass.classlist
数组(实际上,会创建一个新的ArrayList
并将其放在原来的位置。)
ThisClass.classlist.clear();
这是一种更清晰的方法:在代码中显示您的真实意图,指出您真正想要实现的目标,从而使您的代码更具可读性/可维护性。
答案 2 :(得分:2)
正确。
从技术上讲,你没有清除 ArrayList
这样做,实际上你实例化了一个新的空ArrayList
。