StringBuilder是复用好还是new好?

  有时候遇到一些拼接字符串的需求,上一个字符串拼接完了下一个字符串需要再次用到StringBuilder了,此时到底是为了减少memory allocate去复用上一个StringBuilder好还是干脆直接新建一个StringBuilder好呢?

例如有这么一个需求:

1
2
3
4
StringBuilder b = new StringBuilder();
//build up a string
b.delete(0, b.length());
//reuse it

这样在后期代码交接维护的时候会带来疑惑? 这个StringBuilder到底是来干嘛的? 与其话几行的注释去解释为何要这么做, 还不如写一个方法, 来改变这一个StringBuilder的名称(利用final保持引用不改变即可)从而避免遇到这样的问题 :

1
2
3
4
public StringBuilder renameForReuse(StringBuilder sb){
sb.delete(0, sb.length());
return sb;
}

于是乎, 上述的代码可以写成:

1
2
3
4
StringBuilder b1 = new StringBuilder();
//build up a string use b1
StringBuilder b2 = renameForReuse(b1);
//reuse it and rename to b2

这样看起来就清爽多了,也不需要注释因为函数名称足够解释b2是干嘛的了 ;)