Ответ 1
объяснение
Вы не можете явно удалить что-то в Java. Это работа сборщиков мусора, чтобы сделать это. Он удалит все, что больше никому не используется. Так что либо
- пусть переменная выходит из области видимости или
- назначить
null
- или любой другой экземпляр к нему.
Тогда на экземпляр массива (а также на его подмассивы) больше не ссылаются, и сборщик мусора в конце концов удалит его.
Рекомендации
Чтобы понять, почему переназначение внешнего массива достаточно для удаления внутренних массивов, вам необходимо понять, как на них ссылаются. Опять же, сборщик мусора может удалить все, что недоступно. Итак, давайте посмотрим на массив, такой как:
int[][] outer = {{1, 2}, {3, 4}, {5, 6}};
У нас есть 4 экземпляра массива. Один имеет тип int[][]
и три типа int[]
. Также у нас есть одна переменная outer
. На экземпляры ссылаются следующим образом:
___> {1, 2}
|
outer --> int[][] ---|---> {3, 4}
|
|___> {5, 6}
Таким образом, удаляя outer
, никто больше не ссылается на int[][]
. Сборщик мусора теперь может удалить его. Но это также удаляет все ссылки на внутренние массивы, поэтому сборщик мусора теперь также может их удалять.
Теперь предположим, что вы бы ссылались на один из внутренних массивов другой переменной:
int[][] outer = {{1, 2}, {3, 4}, {5, 6}};
int[] thirdInner = outer[2];
other = null; // remove the reference
Ситуация сейчас
outer --> null
___> {1, 2}
|
int[][] ---|---> {3, 4}
|
|______> {5, 6}
|
thirdInner _______________|
Таким образом, сборщик мусора теперь будет удалять внешний массив int[][]
, который также удаляет все ссылки на первый и второй внутренний массив. Но на третий по-прежнему ссылается thirdInner
, поэтому после сборки мусора мы имеем:
outer --> null
thirdInner --> {5, 6}