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

时间:2015-01-28 08:08:37

标签: java performance

为什么需要关闭Scanner类对象而字符串类对象不能? 为什么它显示对象的警告UNUSED

String obj = new String();

并且无法关闭:

Scanner sc = new Scanner(System.in);

2 个答案:

答案 0 :(得分:2)

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

因此,要使用相同的底层资源而不出现任何问题,您需要将其关闭。因此,下一次打开调用不会被阻止,所做的修改(如果有的话)不会破坏资源。

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

为什么显示对象的警告UNUSED:

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

答案 1 :(得分:1)

  
    

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

  

扫描程序保持对inputStream之类的资源的引用,应该关闭它。字符串不会那样做。

  
    

为什么显示对象

的警告UNUSED   

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