この説明が良かったので転送しました
Javaにはキャラクターの操作を担当するクラスが3つあります。
1.Character は単一の文字を操作し、
2.String は文字列を操作する、不変クラスです。
3.StringBuffer も文字列を操作し、変数クラスです。
String:
これはオブジェクトであり、プリミティブ型ではありません。
作成された値は変更できません。
既存の String オブジェクトを変更するには、新しいオブジェクトを再作成する必要があります。新しい値を追加すると、値が保存されます。
String は最終クラスです。つまり、
StringBuffer:
は変更されると、オブジェクトは再確立されません。文字列。
コンストラクターを通じてのみ作成できます。
StringBuffer sb = new StringBuffer();
注: オブジェクトが作成された後は、代入シンボルを通じて支払うことはできません。作成されると、メモリ空間がメモリに割り当てられ、最初に null が保存されます。 StringBuffer に値を割り当てるときは、その append() メソッドを使用できます。
sb.append("hello");
StringBuffer はより効率的です。文字列接続操作の文字列:
String str = new String("welcome to ");
str += "here";処理手順は、実際には StringBuffer を作成し、次に append() を呼び出し、最後に
次に StringBuffer を呼び出します。 toSting();
この場合、String StringBuffer の接続操作にはいくつかの追加操作が必要ですが、当然効率は損なわれます
そして String オブジェクトは不変オブジェクトであるため、Sting が操作されるたびに新しいオブジェクトが作成されます。新しい値を保存するために再確立されます。
次のコードを見てください:
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 |
|
結果は 16 ですが、場合によっては 0 になります
結論は明らかで、StringBuffer は String よりもほぼ数万倍高速です。もちろん、このデータはあまり正確ではありません。サイクル数が 100,000 回になると、その差はさらに大きくなるからです。私の言うことが信じられないなら、試してみてください
それでも理解できない場合:
1) String の Union + メソッドと StringBuff の append メソッドの違い:
String の + 演算子は、まず現在の文字列を追加します。オブジェクトを StringBuff 型に変換し、その append メソッドを呼び出し、最後に生成された StringBuff オブジェクトを toString メソッドで String 型の文字列に変換するため、効率が悪くなります。
しかし、読みやすさという点では、String の接続演算子の方がまだ優れています。
2) StringBuff はスレッドセーフです
String はスレッドアンセーフです
3) String は変更できない文字列オブジェクトですが、StringBuff は変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
JAVA の StringBuffer と String の違いの分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。