比连接字符串好吗?
如果你问是否
stringBufferVariable.append("something")
.append("more");
...
通常会比连接更好,然后是.这就是这些类存在的全部原因.与更新char数组中的值相比,对象创建很昂贵.
现在看来,如果不是所有的编译器现在都将字符串连接转换为使用StringBuilder的简单情况,例如str =“something”“more”“……”;.我可以看到的唯一性能差异是编译器没有设置初始大小的优势.基准测试将告诉您差异是否足够重要.尽管如此,使用会使代码更具可读性.
从我读过的内容来看,编译器显然无法优化循环中的连接
String str = "";
for (int i = 0; i < 10000; i++) {
str = str + i + ",";
}
所以在这些情况下你仍然希望显式使用StringBuilder.
StringBuilder与StringBuffer
StringBuilder不是线程安全的,而StringBuffer是,但它们是相同的.在StringBuffer中执行的同步使它更慢,因此StringBuilder更快,除非您需要同步,否则应该使用它.
你应该使用setLength吗?
您的示例当前编写的方式我不认为对setLength的调用会带来任何结果,因为您在每次循环中都创建了一个新的StringBuffer.你应该做的是
StringBuilder sb = new StringBuilder(128);
while () {
sb.append()
.append()
... ;
// Append stringBufferVariable.toString() to a file;
sb.setLength(0);
}
这样可以避免不必要的对象创建,setLength只会在这种情况下更新内部int变量.