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