为什么 Scanner class 对象需要关闭而字符串 class 对象不能?

Why a Scanner class object needs to be close and a string class object can't?

为什么扫描仪 class 对象需要关闭而字符串 class 对象不能? 为什么显示对象的警告 UNUSED

String obj = new String();

并且不能像这样关闭:

Scanner sc = new Scanner(System.in);

Why a Scanner class object needs to be close and a string class object can't

扫描器保留对应该关闭的 inputStream 等资源的引用。字符串不会那样做。

Why is shows warning UNUSED for the object

因为您声明了对象但从不使用它来读取值。

扫描仪可以保存对资源的引用(在您的情况下它是标准输入流)。流需要先 打开 然后再读取。

因此,要毫无问题地使用相同的底层资源,您需要关闭它。因此下一次调用 open 不会被阻塞,所做的修改(如果有的话)也不会破坏资源。

您无法关闭 String,因为它不指向任何 IO 资源,如文件或流。它指向一个字符串对象。在你的房子里,你可以关上一扇,但你能关上一把椅子吗?

为什么对象显示警告未使用:

任何创建但未使用的对象都是未使用的对象。