J2SE1.5 StringBuilder

感想おまちしてます!

同期の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