Jun 25, 2009

StringBuilder

現在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がほとんどの場合早かったです。