同期のStringBufferと非同期のStringBuilder。Javadocには以下のようにかかれている。
StringBuilderのインスタンスは、複数のスレッドで使用するには安全ではありません。
このような同期が必要な場合は、StringBufferを使用することをお勧めします。
synchronizedとするとStringBufferは安全な分遅い。ほとんどの場合、スレッドセーフでなくてもいいと思うので、StringBuilderを使うといい。
単一スレッドならStringBuilder
複数スレッドならStringBuffer
ちなみに5.0では「str + str」という式をjavacがStringBuilderを使った実装に修正してくれるので、文字連結が楽になる。
使用例
package com.daipresents.test.tiger;
import com.daipresents.test.SpeedCheck;
/**
* StringBuilder.java。<pre>
* </pre>
*/
public class StringBuilderSpeed {
public static void main(String[] args) {
// StringBufferの場合
long start = SpeedCheck.getNowMillisecond();
StringBuffer buff = new StringBuffer(8);
for(int i = 0; i < 100000; i++){
buff.append("1234567890");
}
long end = SpeedCheck.getNowMillisecond();
SpeedCheck.printPassMillisecond(start, end);
// StringBuilderの場合
start = SpeedCheck.getNowMillisecond();
StringBuilder buil = new StringBuilder();
for(int i = 0; i < 100000; i++){
buil.append("1234567890");
}
end = SpeedCheck.getNowMillisecond();
SpeedCheck.printPassMillisecond(start, end);
}
}
実行結果
millsecond = 109 << StringBuffer
millsecond = 94 << StringBuilder