Java String、StringBuilder、StringBuffer
2058 ワード
String vs StringBuilder vs SringBuffer
https://ifuwanna.tistory.com/221
| String vs StringBuffer/StringBuilder
StringとStringBuffer/stringBuilderクラスの最大の違いは、Stringが不変の属性を持っていることです.String str = "hello"; // String str = new String("hello");
str = str + " world"; // [ hello world ]
上記の直感的で最も一般的な例では、Stringクラスの参照変数strが「hello」文字列をその指向位置に格納された「hello」に追加し、「hello world」に変更すると考えられます.
ただし、既存の「hello」値を含むStringクラスの参照変数strは、「hello world」値を持つ新しいメモリ領域を指すように変更され、最初に「hello」と宣言されたメモリ領域はGarbageのままとなり、GC(ゴミ回収)によって破棄されます.Stringクラスは変更されないため、文字列の変更時に新しいStringインスタンスが作成されます.
Stringには不変性があるため、不変の文字列を頻繁に取得する場合は、Stringを使用してパフォーマンスを向上させることができます.ただし、文字列の追加、変更、削除などを頻繁に実行するアルゴリズムでStringクラスを使用すると、スタックメモリ(heap)に大量の一時ゴミが生成され、スタックメモリが不足し、アプリケーションのパフォーマンスに深刻な影響を及ぼします.
このためJavaには、可変属性を持つStringBuffer/stringBuilderクラスが導入されています.
Stringとは反対にStringBuffer/stringBuilderは可変性を有するappend() .delete()などのAPIを使用して、同じオブジェクト内で文字列を変更できます.文字列を頻繁に追加、変更または削除する場合は、StringクラスではなくStringBuffer/stringBuilderを使用します.
StringBuffer vs StringBuilder
最大の違いは、同期がないことです.StringBufferは同期キーワードをサポートし、マルチスレッド環境では安全です(thread-safe).Stringは、不変性を有するため、マルチスレッド環境における安定性(thread−safe)も同様であることに注意してください.
StringBuilderは同期をサポートしていないため、マルチスレッド環境では使用できませんが、同期を考慮しないため、単一スレッドではStringBufferよりもパフォーマンスが優れています.
Reference
この問題について(Java String、StringBuilder、StringBuffer), 我々は、より多くの情報をここで見つけました
https://velog.io/@injoon2019/자바-String-StringBuilder-StringBuffer
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
String str = "hello"; // String str = new String("hello");
str = str + " world"; // [ hello world ]
Reference
この問題について(Java String、StringBuilder、StringBuffer), 我々は、より多くの情報をここで見つけました https://velog.io/@injoon2019/자바-String-StringBuilder-StringBufferテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol