[JAVA] String vs. StringBuffer vs. StringBuilder
Javaにおける処理文字列の代表クラスは
演算量が少ない場合、どのクラスを使用しても重大な問題は発生しません.ただし、演算量の増加やマルチスレッド環境では、各クラスの特性を理解し、状況に応じて適切なクラスを使用する必要があります.
Stringには可変で不変の属性があります.このプロパティをコードと画像で説明します.
しかし、実際にStringは変数strを参照して「Hello」では新しい文字列「Hello World」を指す.Stringクラスは変わらないので、文字列を変更すると、新しいStringインスタンスがメモリに割り当てられます.これにより、文字列を結合するために多数の+演算子を使用すると、Stringオブジェクトの数が増加し、プログラムのパフォーマンスが低下します.
逆に、StringBufferおよびStringBuilderは可変性を有する.つまり、同じオブジェクト内で文字列を変更することができます.
StringBufferとStringBuilderの最大の違いは、同期がユニークであることです.StringBufferはマルチスレッド環境で同期します.すなわちthread-安全です.逆に、StringBuilderでは同期はサポートされていません.しかし、その利点は、単一スレッドでの演算処理速度が速いことです.
String:文字列演算量が小さく、よく参照(クエリー) StringBuffer:文字列演算量が大きく、マルチスレッド環境 StringBuilder:文字列演算量が多く、同期を考慮する必要はありません
(を参照) [Ava]String、StringBuffer、StringBuilderの違いとメリットとデメリット
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では同期はサポートされていません.しかし、その利点は、単一スレッドでの演算処理速度が速いことです.
整理する
(を参照)
Reference
この問題について([JAVA] String vs. StringBuffer vs. StringBuilder), 我々は、より多くの情報をここで見つけました https://velog.io/@yekyeong/JAVA-String-vs.-StringBuffer-vs.-StringBuilderテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol