一尘不染

StringBuilder-重置或创建新的

java

我有一个条件,即StringBuilder会不断存储与大型平面文件(100兆字节)中的模式匹配的行。但是,达到条件后,我将StringBuilder变量的内容写入文本文件。

现在我想知道是否应该通过重置对象->使用相同的变量

stringBuilder.delete(0,stringBuilder.length())

要么

stringBuilder=new StringBuilder();

请提出就性能和OOM问题而言您认为哪个更好。


阅读 447

收藏
2020-12-03

共1个答案

一尘不染

我认为StringBuilder#delete(start, end)通话仍然很昂贵,您应该这样做:

stringBuilder.setLength(0);

重置它。


更新: 查看完
源代码后StringBuilder
,似乎setLength(int)完整保留了旧缓冲区,最好调用:
StringBuilder#trimToSize() 在上述调用which之后 attempts to reduce storage used for the character sequence

所以这样的事情会更有效:

stringBuilder.setLength(0); // set length of buffer to 0
stringBuilder.trimToSize(); // trim the underlying buffer
2020-12-03