HOWTO · Java

Java の StringBuilder と StringBuffer の違い

このチュートリアルでは、Java で使用できる StringBuilder クラスと StringBuffer クラスの違いについて説明します。

このページの内容

このチュートリアルでは、Java の StringBuilder クラスと StringBuffer クラスの違いについて説明します。 それでは始めましょう!

Java の StringBuffer

StringBuffer クラスは、Java で変更可能な文字列データを使用できる手段を提供します。 これらの文字列は、リスクなしで同時に多数のスレッドによって無関係な方法で使用される可能性があります。

構文:

StringBuffer b = new StringBuffer("Shanii");

例:

public class BufferexamplebyZeeshan {
  public static void main(String[] args) {
    StringBuffer b = new StringBuffer(" Hi! ");
    b.append(" Muhammad Zeeshan Here! ");
    b.append(" Let's Code ");
    System.out.println(b);
  }
}

出力:

Hi! Muhammad Zeeshan Here! Let's Code

Java の StringBuilder

この実装にはスレッド セーフがありませんが、StringBuilder は変更可能な文字列へのアクセスも提供します。 多数のスレッドが同時にそれを利用することはできません。

このクラスはこの追加機能を適用しないため、StringBuffer よりもはるかに高速です。

構文:

StringBuilder s1 = new StringBuilder("Shani");

例:

public class BuilderexamplebyZeeshan {
  public static void main(String[] args) {
    StringBuilder s = new StringBuilder(" Hey!");
    s.append("I am a Programmer");
    System.out.println(s);
  }
}

出力:

Hey!I am a Programmer

Java における StringBuilderStringBuffer の違い

以下のステートメントで StringBuilderStringBuffer の違いを見てみましょう。

いいえ。 StringBuilder StringBuffer
1 StringBuilder 関数は同期されていないため、スレッドセーフではありません。 これは、2つの異なるスレッドが StringBuilder クラスのメソッドを同時に呼び出すことができることを示しています。 StringBuffer オブジェクトは同期されます。つまり、スレッドセーフです。 これは、StringBuffer のメソッドを 2つの異なるスレッドから同時に呼び出すことができないことを示しています。
2 コンピューターの ヒープ メモリに生成されます。 また、heap メモリにも生成されます。
3 Mutable な文字列を提供します。 オブジェクトを構築せずに文字列を変更できます。
4 デフォルトの 16 文字を保存できます。 StringBuilder と同様に、デフォルトで 16 文字を格納できます。
5 多くのスレッドが同時に動作するのを防ぎながら可変性をサポートするため、それらすべての中で最も高速です。 複数のスレッドが同時にアクションを実行できるようにするため、StringBuilder クラスよりも低速です。
6 連結は append() 関数を使用して行われます。 その連結も append() 関数を使用して行われます。

StringBuilderStringBuffer を使用した例

StringBuilder は同期されていないため、 StringBuffer よりも高速です。 StringBuilderStringBuffer の両方を比較するための基本的な例を見てみましょう:

public class Main {
  public static void main(String[] args) {
    int RandomNumber = 5677839;
    long time;
    StringBuffer s = new StringBuffer();
    time = System.currentTimeMillis();
    for (int i = RandomNumber; i-- > 0;) {
      s.append("");
    }
    System.out.println(System.currentTimeMillis() - time);

    StringBuilder b = new StringBuilder();
    time = System.currentTimeMillis();
    for (int i = RandomNumber; i > 0; i--) {
      b.append("");
    }
    System.out.println(System.currentTimeMillis() - time);
  }
}

出力:

161
17

上記の例は、StringBuffer161 ミリ秒と StringBuilder17 ミリ秒の数値比較を提供します。これは、StringBuilder がより効率的なオプションであることを明確に示しています。