StringBuffer or StringBuilder?

StringBuilderがStringBufferよりどれほど高速か、実際に少しパフォーマンス比較をしてみました。

useStringBuffer : 141 milsec.
useStringBuilder : 125 milsec.
useStringBuffer : 156 milsec.
useStringBuilder : 125 milsec.
useStringBuffer : 141 milsec.
useStringBuilder : 109 milsec.
useStringBuffer : 157 milsec.
useStringBuilder : 109 milsec.
useStringBuffer : 156 milsec.
useStringBuilder : 110 milsec.
useStringBuffer : 140 milsec.
useStringBuilder : 125 milsec.
useStringBuffer : 141 milsec.
useStringBuilder : 109 milsec.
useStringBuffer : 141 milsec.
useStringBuilder : 109 milsec.
useStringBuffer : 141 milsec.
useStringBuilder : 110 milsec.
useStringBuffer : 140 milsec.
useStringBuilder : 110 milsec.

確かに速いです。が、原理主義者になるほどの差でもないので、リファクタリング時に見つけたら類似見直し、というくらいがちょうどいいかもしれません。

テストコードは以下です。

package example;
import jp.sourceforge.javacpt.ComparativePerformanceTest;
import jp.sourceforge.javacpt.ComparativePerformanceTestHelper;
public class SBPerformanceTest
{
	public static void main(String[] args) throws Exception
	{
		ComparativePerformanceTest test = ComparativePerformanceTestHelper.initialize(
				1000, SBPerformanceTest.class);
		ComparativePerformanceTestHelper.invoke(test, "useStringBuffer");
		ComparativePerformanceTestHelper.invoke(test, "useStringBuilder");
	}

	public static String useStringBuffer()
	{
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < 1000; i++)
		{
			sb.append("hoge");
		}
		return sb.toString();
	}

	public static String useStringBuilder()
	{
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < 1000; i++)
		{
			sb.append("hoge");
		}
		return sb.toString();
	}
}

例のごとく、以下のツールを使いました。

http://sourceforge.jp/projects/java-cpt/wiki/FrontPage