StringBuffer vs StringBuilder


どうしてStringじゃないの?


Stringはデフォルトでは可変ではありません.
オブジェクトを変更すると、元のオブジェクトを変更するのではなく、新しいオブジェクトが作成されます.
異なる点は、StringBufferとStringBuilderには、文字列を格納および変更できるメモリ領域があり、オブジェクトの文字列を変更できます.
したがって、文字列を頻繁に変更する場所では、StringBufferとStringBuilderを使用するとメモリのオーバーヘッドを削減できます.

StringBuffer vs StringBuilder

  • StringBuffer:マルチスレッド環境で安全です.
  • StringBuilder:Thread-Safeはありませんが、パフォーマンスは向上しています.
  • したがって、マルチスレッド環境ではStringBuffer
    シングルスレッド環境の場合はStringBuilderを使用します.

    StringBufferとStringBuilderの使い方(両方同じ)


  • 作成
    StringBuffer sb = new StringBuffer();
    
    StringBuffer sb = new StringBuffer(10);
    
    StringBuffer sb = new StringBuffer("AAA");

  • 文字列の追加

  • append():末尾に文字列を追加
    StringBuffer sb = new StringBuffer(); 
    sb.append("111"); // "111"
    sb.append("222"); // "111222"
    sb.append("333"); // "111222333"

  • insert():指定したインデックスに文字列を追加
    StringBuffer sb = new StringBuffer(); 
    sb.append("111"); // "111"
    
    sb.insert(2, "2"); // -> "1121" 

  • 逆方向():文字列を反転
    StringBuffer sb = new StringBuffer(); 
    sb.append("1234"); // "1234"
    
    sb.reverse(); // "4321"

  • delete(start,end):startまたはend-1にインデックスされた文字列を削除します.
    StringBuffer sb = new StringBuffer(); 
    sb.append("12345"); // "12345"
    
    sb.delete(1,3); //"23" 삭제

  • replace(start,end):startインデックスから(end-1)インデックスへの置換
    StringBuffer sb = new StringBuffer(); 
    sb.append("12345"); // "12345"
    
    sb.replace(1,3,"66"); //"23"이 "66"으로 치환됨