Javaには、文字を表現するための3つのクラス「String, StringBuffer, StringBuilder」が用意されています。
Stringクラスは不変のクラスですが、StringBufferとStringBuilderクラスは可変のクラスです。
StringBufferとStringBuilderの間には相違点があります。StringBuilderクラスはJDK1.5から導入されています。
StringBufferとStringBuilderの違いの一覧は以下の通りです。
StringBuffer | StringBuilder | |
1 | StringBufferはsynchronized、すなわちスレッドセーフです。つまり、2つのスレッドが同時にStringBufferのメソッドを呼び出すことはできません。 | StringBuilderは非同期型であり、スレッドセーフではない。つまり、2つのスレッドが同時にStringBuilderのメソッドを呼び出すことができる。 |
2 | StringBuffer は StringBuilder よりも効率が悪い。 | StringBuilder は StringBuffer よりも効率的です。 |
3 | StringBuffer は Java 1.0 で導入されました。 | StringBuilderはJava 1.5で導入されました。 |
StringBufferとStringBuilderの性能
StringBufferクラスとStringBuilderクラスの性能を確認するためのコードを見てみましょう。
//Java Program to demonstrate the performance of StringBuffer and StringBuilder classes. public class ConcatTest{ public static void main(String[] args){ long startTime = System.currentTimeMillis(); StringBuffer sb = new StringBuffer("Java"); for (int i=0; i<10000; i++){ sb.append("Tpoint"); } System.out.println("Time taken by StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms"); startTime = System.currentTimeMillis(); StringBuilder sb2 = new StringBuilder("Java"); for (int i=0; i<10000; i++){ sb2.append("Tpoint"); } System.out.println("Time taken by StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms"); } } //Time taken by StringBuffer: 16ms //Time taken by StringBuilder: 0ms