StringBufferとStringBuilder
出典: フリー百科事典『ウィキペディア(Wikipedia)』
クラスは二つの中核となるJavaにある文字列クラスのひとつである。多くの場合、StringBuffer
String
クラスが使われるが、しかながら、StringBuffer
クラスはミュータブルオブジェクトである、一方 String
クラスは イミュータブルである。 それはStringBuffer
オブジェクトが更新されうることを意味する一方、String
クラスでは似たようなメソッドが新たにString
オブジェクトを生成しメソッドの戻り値としてreturnされた文字列の内容が変更されることで実現される。多くのString
オブジェクトを生成しては捨てていく処理の替わりにStringBuffer
を使った方がより効率的である。
StringBuilder
クラスは、同期を考慮しないことがStringBuffer
とは異なる点であり、これはJ2SE 5.0で導入された。オブジェクトにアクセスするシングルスレッドのときだけ、StringBuilder
はStringBuffer
よりもより効率的に使われる。
StringBuffer
と StringBuilder
はjava.lang
パッケージに含まれている。
パフォーマンス改善としてString
の替わりにStringBuffer
を使ったコード例を以下に示す。
StringBuffer sbuf = new StringBuffer(300); for (int i = 0; i < 100; i++) { sbuf.append(i); sbuf.append('\n'); }
加えて、Javaコンパイラ(e.g., javac)は通常、文字列や加法演算子に加えられたオブジェクトの連結にはStringBuilder
(または StringBuffer
)を使用する。例として、下のコード
String s = "a + b = " + a + b;
は以下のように解釈される。
StringBuffer sbuf = new StringBuffer(32); sbuf.append ("a + b = "); sbuf.append(a); sbuf.append(b); String s = sbuf.toString();