モジュール java.base
パッケージ java.lang

クラスStringBuffer

java.lang.Object
java.lang.StringBuffer
すべての実装されたインタフェース:
Serializable, Appendable, CharSequence, Comparable<StringBuffer>

public final class StringBuffer extends Object implements Appendable, Serializable, Comparable<StringBuffer>, CharSequence
スレッドセーフな可変の文字列。 文字列バッファはStringに似ていますが、変更できる点が異なります。 文字列バッファには常に文字列が格納されていますが、文字列の長さと内容は特定のメソッドの呼出しにより変更できます。

文字列バッファは複数のスレッドによって安全に使用することができます。 メソッドは必要に応じて同期化され、特定のインスタンスでのすべてのオペレーションが、関連のある個々のスレッドによって行われるメソッドの呼出しの順序と一致する連続した順序で発生するように動作します。

StringBufferの基本的なオペレーションには、appendメソッドおよびinsertメソッドがあり、これらのメソッドはどんな種類のデータも受け取ることができるようにオーバーロードされています。 メソッドはそれぞれ与えられたデータを効率的に文字列に変換し、文字列中の文字を文字列バッファに追加または挿入します。 appendメソッドは常に、バッファの末尾に与えられた文字を追加し、insertメソッドは指定された位置に文字を追加します。

たとえば、zが、現在"start"を含む文字列バッファ・オブジェクトを参照している場合、メソッド呼出しz.append("le")はその文字列バッファの内容が"startle"になるように変更するのに対し、z.insert(4, "le")はその文字列バッファの内容が"starlet"になるように変更します。

一般に、sbがStringBufferのインスタンスを参照している場合、sb.append(x)sb.insert(sb.length(), x)と同じ結果になります。

オペレーションにソース・シーケンスが関連する場合(ソース・シーケンスからの追加や挿入など)、このクラスは、そのオペレーションを実行している文字列バッファとだけ同期し、ソースとは同期しません。 コンストラクタあるいはappendまたはinsertオペレーションにスレッド間で共有されるソース・シーケンスが渡される場合、StringBufferは複数のスレッドから並行して使用できるように作られていますが、呼出し元コードではオペレーションの処理中にそのソース・シーケンスの一貫した不変のビューが保持されるようにする必要があることに注意してください。 これは、呼出し側でオペレーションの呼出し中にロックを保持するか、不変のソース・シーケンスを使用するか、またはスレッド間でソース・シーケンスを共有しないことで達成できる可能性があります。

各文字列バッファには容量があります。 文字列バッファに含まれる文字列の長さが容量を超過しないかぎり、新しい内部バッファ配列を割り当てる必要はありません。 内部バッファがオーバーフローする場合、自動的に容量が増加します。

ほかで指定がない場合、null引数をコンストラクタまたはこのクラスのメソッドへ渡すと、NullPointerExceptionがスローされます。

JDK 5以降、このクラスは単一のスレッドStringBuilderにより使用されるよう設計された等価のクラスで補足されています。 StringBuilderクラスは、このクラスと同じ処理をすべてサポートしながらも高速であり、同期を実行しないので、通常はこのクラスに優先して使用される必要があります。

APIのノート:
StringBufferComparableを実装しますが、equalsはオーバーライドしません。 したがって、StringBufferの自然な順序はequalsと一致しません。 StringBufferオブジェクトがSortedMapのキーまたはSortedSetの要素として使用される場合は注意が必要です。 詳細については、ComparableSortedMap,またはSortedSetを参照してください。
導入されたバージョン:
1.0
関連項目: