[JAVA] String, StringBuffer, StringBuilder


String


Stringのクラスには不変性があります。不変は、値が不変であることを意味します。すなわち、文字列値がheapメモリに割り当てられると、削除されるまで保持されます。
void function() {
	String str1 = "kkobi";
	String str2 = str1;
	String str3 = "kkobi";
}

  • 文字列値がheapメモリに含まれていない場合は、他のメモリ領域に再割り当てされ、変更されません.str 2=str 2+「dev」がstr 2変数値を変更した場合、「kkobi dev」値をstr 2変数にマージするのではなくheapメモリ領域に再割り当てます.

  • Stringの+演算では、新しいオブジェクトが生成されます.

  • 可変状態ではスレッド間の共有も安全であり、変更なしに読み取りを行うだけであれば、StringBufferやStringBuilderよりもパフォーマンスのメリットが大きい.
  • StringBuffer StringBuilder


    StringBufferとStringBuilderは内部で同じchar配列を使用して文字列を管理します。2つのオブジェクトの違いは、StrinfBufferが同期をサポートし、マルチスレッド環境を安全にすることです。

  • 文字列のマージを複数回試みた場合、Stringの+演算よりもパフォーマンスが優れています.

  • 初期アレイ値は16であり、十分なスペースがない場合、アレイのサイズは2倍になり、Arraysが使用されます.copyOf()関数を使用して値をコピーします.
  • リファレンス


    https://cjh5414.github.io/why-StringBuffer-and-StringBuilder-are-better-than-String/