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(); } }
例のごとく、以下のツールを使いました。