Привет! Желательно, но не обязательно. В Java есть механизм освобождения ресурсов которые уже не используются. Но с точки зрения правильного кода, это надо делать. Спасибо за замечание!
Файн Я. в своей книге испольует System.in как аргумент конструктора InputStreamReader (который, в свою очередь, идет как аргумент конструктора BufferedReader). Например: BufferedReader BuffRead=new BufferedReader(new InputStreamReader(System.in)); А потом уже передает переменной типа стринг введенные в консоль данные, через readLine(); Напрример: String text=BuffRead.readLine(); Но вы в своем примере используете вместо потоков готовый класс из пакета util. Вопрос: Ваш пример действует аналогично, класс Scanner так же открывает потоки?
Извиняюсь, прочитал вопрос не до конца. Предыдущий мой комментарий относился к возможности использования System.in в том контексте, как Вы указали. Что же касается Scanner, то он не создает стримы как таковые, но может их использовать для чтетия данных (читать данные из стримов)