Можно ли по правилам ООП создавать ссылку на поле объекта? Java

У меня была такая ситуация:

Class A = new Class();
int[][] B = A.getField();

В процессе выполнения программы поле field редактируется с помощью метода класса Class. Затем ссылке-переменной A присваивается новый объект.

A.editField();
A = new Class();

Однако последствии выясняется, что ссылка B все так же ссылается на поле field первого объекта. Как так получается, что объекта уже не существует, но его поле еще осталось? Можно ли вообще по правилам ООП создавать ссылку на поле объекта?


Ответы (1 шт):

Автор решения: Maxgmer

Объект в этом случае был просто держателем ссылки на field. По правилам сборки мусора, объект уничтожается только тогда, когда на объект не будет ссылок.

В вашем случае, при уничтожении объекта все его поля были уничтожены, в том числе ссылка на field. Но вы создали другую ссылку из другого места, поэтому field не был уничтожен, так как на него все еще есть ссылки.

То есть на самом деле поля объекта не осталось, оно действительно было уничтожено. Просто была создана вторая ссылка, которая сохранила field от сборщика мусора не смотря на то, что первая ссылка (ссылка внутри объекта) была удалена вместе с объектом.

→ Ссылка