文字列結合

文字列結合速度比較。
JDKは1.5.0_05-b05。
Javaは5になってから、文字列結合用のStringBufferのほかにStringBuilderという非同期のクラスが追加されました。StringBufferよりStringBuilderのほうが速度が速いというアナウンスです。
また、Stringクラスの文字列結合の速度改善(コンパイル時に最適化される)ということ。
その確認ソース


/* 文字列結合テスト */
/* String */
long start = System.currentTimeMillis();
String stringTest = new String();
for( int i = 0; i < 10000; i++ ){
stringTest += "あいうえお";
}
long stop = System.currentTimeMillis();
long stringTime = stop - start;

/* StringBuffer */
start = System.currentTimeMillis();
StringBuffer bufferTest = new StringBuffer();
for( int i = 0; i < 10000; i++ ){
bufferTest.append( "あいうえお" );
}
String buf = bufferTest.toString();
stop = System.currentTimeMillis();
long bufferTime = stop - start;

/* StringBuilder */
start = System.currentTimeMillis();
StringBuilder builderTest = new StringBuilder();
for( int i = 0; i < 10000; i++ ){
builderTest.append( "あいうえお" );
}
String bui = builderTest.toString();
stop = System.currentTimeMillis();
long bulderTime = stop - start;

/* 結果 */
System.out.println( "String:" + stringTime );
System.out.println( "Buffer:" + bufferTime );
System.out.println( "Builder:" + bulderTime );

結果。数値はミリセカンド。
1回目

String:51795
Buffer:10
Builder:60

2回目

String:37253
Buffer:0
Builder:0

3回目

String:37214
Buffer:50
Builder:10

4回目

String:37975
Buffer:0
Builder:0

1回目の記録は初回なのでインスタンス生成の時間がかかっているのだろうか。

結論としては、Stringを文字列結合に使ってはいけないこと。
StringBufferとStringBuilderの違いはほとんどないので、あえてStringBulderからStringBufferに変更することはない。