关闭读取字符串的扫描仪

Closing a Scanner that reads a String

我有这段代码(我可以很大):

for (int i = 0; i < 100_000_000; i++)  {
  Scanner scanner = new Scanner("Some String");
  //do some stuff with the scanner
  scanner.close(); //needed?
}

这种情况下是否需要调用.close()方法?从performance/resources来看。

Scanner使用StringReader读取输入字符串

这是可能的 StringReader.close() 实施方式

    public void close() {
        str = null;
    }

close 之后的任何 read 调用都会抛出异常。

因此,从性能的角度来看,除非引用有一个大字符串并且在活动线程的视野中保持更长的持续时间,否则它应该是最小的。

但是,如果代码依赖于消息传递(通过触发异常)使用 Scanner 的共享实例到代码的其他部分(例如,代码流不检查 -1并且仍然在共享实例上重复调用 read),那么它将有不同的行为