У меня есть следующий код в ThisClass
:
static ArrayList<MyClass> classlist;
Если я позвоню:
ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);
И затем снова вызовите эту строку:
ThisClass.classlist = new ArrayList<MyClass>();
Будет ли он сбросить список ThisClass.classlist
, т.е. список списков классов больше не будет содержать объект?
Вот иллюстрация:
ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);
Результаты в этом:
ThisClass.classlist = new ArrayList<MyClass>();
Результаты в этом - вы сбросите его, указав на новый объект:
То, что вы должны сделать, чтобы "больше не содержать объект", это:
ThisClass.classlist.clear();
Очищает циклы через все элементы и делает их нулевыми. Ну внутренне ArrayList также указывает на адрес памяти своих объектов, но для простоты просто подумайте, что они "удаляются", когда вы вызываете этот метод.
Если вы хотите, чтобы он "больше не содержал ArrayList", вы делаете:
ThisClass.classlist = null;
Это означает:
Также обратите внимание, что в названии вопроса упоминается "static ArrayList". static
не имеет значения в этом контексте. Результатом вашей проблемы будет то же самое, будет ли объект статичным или нет.
призвание
ThisClass.classlist = new ArrayList<MyClass>();
это очистит ThisClass.classlist
массив ( на самом деле, будет создан новый ArrayList
и поместить его там, где старый был).
ThisClass.classlist.clear();
Это более понятный способ: показывает ваше истинное намерение в коде, указывая на то, что вы действительно пытаетесь выполнить, тем самым делая код более читабельным/поддерживаемым.
Верный.
Технически, вы не очищаете ArrayList
делая это, вы фактически создаете новый пустой ArrayList
.
ArrayLists
не оarrays
. Если нет никакой другой ссылки на старыйArraylist
, это будет сбор мусора.