不关闭字符串器会导致泄漏吗?

我意识到在java中GC最终会清理对象,但我问不关闭字符串编写器是否是不好的做法,目前我正在这样做:

 private static String processTemplate(final Template template, final Map root) {
        StringWriter writer = new StringWriter();
        try {
            template.process(root, writer);
        } catch (TemplateException e) {
            logger.error(e.getMessage());
        } catch (IOException e) {
            logger.error(e.getMessage());
        }
        finally {

        }

        return writer.toString();
    }

我应该关闭编写器并创建一个新的字符串,如下所示:

String result = "";

...

finally {
  result = writer.toString();
  writer.close();
}

这样做更好吗?


答案 1

javadoc非常明确:

关闭 StringWriter 不起作用。

快速浏览一下代码可以确认这一点:

public void close() throws IOException {
}

答案 2

它不保存任何非内存资源。它将像其他任何东西一样被垃圾收集。close() 可能只是因为其他编写器对象确实包含需要清理的资源而存在,并且需要 close() 来满足接口。