Много ответов, так вот мое вращение. Подумайте о «объеме», концепции компьютерных языков, которая описывает, где и когда вы можете получить доступ к названному биту памяти.
Вот ваш оригинальный код с добавлением вашего предполагаемого удаления второго члена списка:
LinkedList <Mono> list = new LinkedList ();
list.add(new Mono (2, 2));
list.add(new Mono (1, -1));
list.remove (1);
list.remove (2);`
В точке list.remove (2) на объект «список» все еще можно ссылаться. Конечно, он пуст, но тогда вы можете решить добавить в него новый Mono. Вы можете это сделать, потому что «list» по-прежнему в области действия , поэтому «list» не возвращается.
Сравните с этим:
{
LinkedList <Mono> list = new LinkedList ();
list.add(new Mono (2, 2));
list.add(new Mono (1, -1));
list.remove (1);
list.remove (2);`
}
После закрывающей скобки на «список» больше нельзя ссылаться. «Список» был объявлен внутри этой области, и когда область была закрыта, «список» был удален из пространства имен вместе с самой областью. В этой точке сбор мусора может произойти, поскольку никто не сможет снова использовать «list».
Следите за областью действия ваших объектов. Если вы хотите повлиять на сборку мусора, ограничьте область действия ваших объектов областью, в которой они используются. Как оказалось, это тоже хороший стиль программирования.