[JAVA] String vs. StringBuffer vs. StringBuilder


Javaにおける処理文字列の代表クラスはString,StringBuffer,StringBuilderである.
演算量が少ない場合、どのクラスを使用しても重大な問題は発生しません.ただし、演算量の増加やマルチスレッド環境では、各クラスの特性を理解し、状況に応じて適切なクラスを使用する必要があります.

可変String


Stringには可変で不変の属性があります.このプロパティをコードと画像で説明します.
String str = "Hello";
str += " World"; // [Hello World]
次のコードでは、String参照変数strが指す「Hello」に「World」が追加されており、「Hello World」と誤認されやすい.
しかし、実際にStringは変数strを参照して「Hello」では新しい文字列「Hello World」を指す.Stringクラスは変わらないので、文字列を変更すると、新しいStringインスタンスがメモリに割り当てられます.これにより、文字列を結合するために多数の+演算子を使用すると、Stringオブジェクトの数が増加し、プログラムのパフォーマンスが低下します.

Mutable(可変)のStringBufferとStringBuilder


逆に、StringBufferおよびStringBuilderは可変性を有する.つまり、同じオブジェクト内で文字列を変更することができます.
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World"); // [Hello World]

StringBufferとStringBuilderの違い


StringBufferとStringBuilderの最大の違いは、同期がユニークであることです.StringBufferはマルチスレッド環境で同期します.すなわちthread-安全です.逆に、StringBuilderでは同期はサポートされていません.しかし、その利点は、単一スレッドでの演算処理速度が速いことです.

整理する

  • String:文字列演算量が小さく、よく参照(クエリー)
  • StringBuffer:文字列演算量が大きく、マルチスレッド環境
  • StringBuilder:文字列演算量が多く、同期を考慮する必要はありません
    (を参照)
  • [Ava]String、StringBuffer、StringBuilderの違いとメリットとデメリット