JavaのStringBufferとStringの違いは何ですか?

JavaにおけるStringBufferとStringの違い

Javaにおいて、文字列を扱う際に String クラスと並んで使用されるのが StringBuffer クラスです。どちらも文字列を格納するためのクラスですが、それぞれに異なる特徴と用途があります。

StringBufferとは

StringBuffer は、可変の文字列を扱うためのクラスです。一度作成した StringBuffer オブジェクトに対して、文字の追加、挿入、変更などの操作が可能です。一方、String クラスは 不変 の文字列を扱います。一度作成した String オブジェクトの値を変更することはできません。文字列操作を行う場合は、新たな String オブジェクトが生成されます。

StringBufferのメリット

StringBuffer クラスを使用するメリットは、主にパフォーマンスにあります。 String クラスの場合、文字列操作を行うたびに新しいオブジェクトが生成されます。大量の文字列操作を行う場合、オブジェクト生成のオーバーヘッドが大きくなり、パフォーマンスが低下する可能性があります。

一方、StringBuffer クラスは、オブジェクトの内容を直接変更するため、オブジェクト生成のオーバーヘッドを削減できます。特に、ループ処理などで繰り返し文字列操作を行う場合は、StringBuffer を使用することでパフォーマンスの向上が見込めます。

StringBufferのメソッド

StringBuffer クラスには、文字列操作を行うための様々なメソッドが用意されています。主なメソッドを以下に示します。

メソッド 説明
append() 文字列の末尾に文字列を追加する
insert() 指定した位置に文字列を挿入する
delete() 指定した範囲の文字列を削除する
replace() 指定した範囲の文字列を置換する
reverse() 文字列を反転する

StringBufferの使用例

以下は、StringBuffer クラスを用いて文字列を操作する例です。

public class StringBufferExample {
    public static void main(String[] args) {
        // StringBufferオブジェクトの生成
        StringBuffer sb = new StringBuffer("Hello");

        // 文字列の追加
        sb.append(", World!");

        // 文字列の挿入
        sb.insert(5, " Java");

        // 結果の出力
        System.out.println(sb.toString()); // "Hello Java, World!"
    }
}

StringBufferとStringの使い分け

StringBufferString は、それぞれ以下のような場合に使い分けられます。

  • String: 文字列の値が変化しない場合
  • StringBuffer: 文字列の値が変化する場合、特にループ処理などで繰り返し文字列操作を行う場合

参考文献

StringBufferに関するQ&A

Q1: StringBufferとStringBuilderの違いは何ですか?

A1: StringBuilderStringBuffer とほぼ同じ機能を持つクラスですが、スレッドセーフではありません。そのため、単一スレッドで使用する場合には StringBuilder の方が高速に動作します。

Q2: StringBufferの初期容量を変更できますか?

A2: はい、StringBuffer オブジェクトを生成する際に、コンストラクタの引数に初期容量を指定することで変更できます。

Q3: StringBufferはnullを格納できますか?

A3: はい、StringBuffernull を格納することができます。

その他の参考記事

その他の参考記事:JavaScript String 文字列オブジェクト