Имена переменных являются только ссылками. Они указывают на пространство в памяти (в куче), которое содержит объект.
Когда вы делаете MyObj myObject = new MyObj();
, он делает две вещи: создает объект в памяти и указывает на него ссылку myObject.
Поэтому, когда вы делаете myObject.sections
, он следует по ссылке и проверяет часть разделов вашего объекта в памяти.
Затем, когда вы делаете myObject = null
, вы в основном разрушаете связь между вашей ссылкой и вашим объектом в памяти. Следовательно, при выполнении myObject.sections
Java больше не может следовать ссылке, потому что она ни на что не указывает. Так бросает NullPointerException
Обратите внимание, что сам объект не уничтожен myObject = null
, аннулируется только ссылка. Затем сборщик мусора обнаруживает, что ваш объект недоступен (если на него нет другой ссылки), и восстанавливает память, уничтожая объект.