現在JDK5.0で開発しているため文字列結合する時はStrinBuilderを使っています。研修中調べた結果StringBuilderがStringBufferより30%早かったからです。
そのソース
public class SpeedTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder(6*1000000);
for (int i = 0; i < 1000000; i++) {
sb.append(i);
}
long end = System.currentTimeMillis();
System.out.println("StringBuilder = " + (end - start)); start = System.currentTimeMillis();
StringBuffer sf = new StringBuffer(6*1000000);
for (int i = 0; i < 1000000; i++) {
sf.append(i);
}
end = System.currentTimeMillis();
System.out.println("StringBuffer = " + (end - start)); }
} |
実行結果:
StringBuilder = 94
StringBuffer = 140
しかしStringBuilderがStringBufferより早い理由を知らずに使うには気がすまなかったのでソースを見た結果。。。 分析できませんでした。
それでGoogle先生に聞いた結果。。。 先生も知りませんでした。 (-.-);;;;
ちょっと方向を変えて本当にStringBuilderが早いか調べました。今回もGoogle先生にお世話になりました。
StringBufferからStringBuilderへ変えた後遅くなった事例がありました。(英語です)
http://www.velocityreviews.com/forums/t366388-stringbuilders-performance-lower-than-that-of-stringbuffer.html
しかし遅くなったソースは見れなかったので上のURLへ乗せられてある速度を計るソースを試してみた結果、
StrinBuilderがほとんどの場合早かったです。