Java

Java. Сборщик мусора.

Сборщик мусора закрывает Scanner(System.in) автоматически, если не использовать обработку исключений и .close? Если да, тогда смысл закрывать в коде, в чём различие?
Сборщик мусора не закрывает Scanner( System.in ) автоматически. Если вы не закроете Scanner явно с помощью метода .close(), то ресурсы, связанные с ним, не будут освобождены до тех пор, пока программа не завершится или не будет уничтожен объект Scanner. Это может привести к утечкам памяти и другим проблемам.

Если вы явно закрываете Scanner в коде, то вы гарантируете, что все связанные с ним ресурсы будут освобождены немедленно после использования. Это может быть полезно, если вы работаете с большим количеством Scanner объектов или если ваша программа работает длительное время.

Хошей практикой является закрытие всех ресурсов, которые вы используете в своей программе, включая Scanner. Это поможет избежать утечек памяти и других проблем.
Артём Манеев
Артём Манеев
5 739
Лучший ответ
да пиши как хочешь
никто на твой код смотреть не будет.
Scanner( System.in ) -- далеко не единственный способ использования сканера....

если лень писать закрытие, то и используй try-with-resources
всё за тебя закроют
Дэн Громов
Дэн Громов
56 589
Смотри, ты объявляешь сканер
 Scanner scanner = new Scanner(); 
Первая часть тут ссылка на объект, а то, что после = сам объект.
Сборщик мусора не будет уничтожать объект, пока на него есть хоть одна ссылка, которая доступна из метода main (может содержать сколько угодно вложенных элементов, главное, чтобы по цепочке можно было дойти до объекта).
Для того, чтобы сборщик мусора уничтожил объект, можно сделать ссылку null.
 scanner = null; 
В этом случае объект сканера будет помечен, как мертвый, т.е. на него не ведет ни одна ссылка в приложении, и уничтожен сборщиком мусора. В ином случае, объект уничтожен не будет, если не используется try-with-resources или сканер не закрыт явно методом close().
Никита Ким
Никита Ким
40 393