2015-11-15 3 views
0

У меня возник вопрос о следующем фрагменте кода.Java: Сколько объектов создано? Массив как переменная элемента

class MemArr{ 
    int[] mem = {1,2}; 
} 

public class Test{ 
    public static void main(String[] args){ 
    MemArr[] x = new MemArr[2]; //line 1 
    x[0] = new MemArr();   //line 2 
    x[1] = null;     //line 3 
           //line 4 
    } 
} 

Сколько объектов создаются в общей сложности и сколько объектов имеют право на сбор мусора, когда линия 1 достигается?

Я считаю, что в строке 1, было 5 объектов, созданных (1 массив х, 2 объекты MemArr в массиве х, 2 переменные члены массива целых чисел для объектов MemArr)

В строке 2 , были созданы два объекта (один объект MemArr и его переменная-член mem).

В строке 3, когда x[1] установлен в null, я думаю, что было всего 4 объекта, которые имеют право на GC, но я не очень уверен в этом.

ответ

2
MemArr[] x = new MemArr[2]; 

Это создает новый MemArr массив из 2 элементов, но это не инициализировать любого из 2-х элементов. После этого объявления x[0] и x[1] оба являются null: массив был создан, но не его содержимое.

x[0] = new MemArr(); 

Это действительно назначает новый MemArr к первому элементу массива. Поэтому он создает один MemArr и другой массив для внутреннего int[] mem, который он содержит.

x[1] = null; 

Эта линия ничего не делает; значение было уже null, как сказано ранее.

1

Первая строка создает единый объект массива из 2 элементов. Оба элемента по умолчанию равны нулю, поэтому не создаются объекты MemArr.

Вторая строка создает один объект MemArr и один внутренний объект массива внутри этого объекта.

Третья строка не создает никаких объектов. На самом деле это не имеет значения, поскольку x[1] уже имеет значение null.

+0

Ну ладно, я вижу свою ошибку. Спасибо! – Philipp

Смежные вопросы