Вот эти три строки кода создают три различных новых объекта ToyCar
cars[0] = new ToyCar();
cars[1] = new ToyCar();
cars[2] = new ToyCar();
После выполнения этих двух строк кода
cars[0] = null;
cars[1] = null;
первые два объекта автомобиля будут иметь право на сборку мусора. потому что в JVM нет внешней ссылки на этот объект.
Теперь зайдите на эту линию
ToyShop company = new ToyShop();
company.setToyCar(cars[2]); //now car object at 2ond Index have external ref.
Здесь третья ссылка на объект назначается ссылочной переменной toyCar
, представленной как переменная-член в company
.
Итак, после выполнения строки cars = null;
в JVM
.
присутствует еще одна внешняя ссылка.
Таким образом, только 2 объекта будут иметь право на сборку мусора после выполнения cars = null;
.