String と StringBuffer の違いはインターネット上で無数にあると言えますが、この記事を見たとき、その中にある小さな例が非常に代表的であると感じたので、それを参照して自分で要約してみました。
Javaにはキャラクターの操作を担当するクラスが3つあります。
1.Character は単一の文字を操作し、
2.String は文字列を操作します。不変クラス。
3.StringBuffer も文字列を操作しますが、これは変数クラスです。
String:
はプリミティブ型ではないオブジェクトです。
作成された値は変更できません。
既存の String オブジェクトを変更するには、新しいオブジェクトを作成してから、
String は最終クラスです。つまり、継承できません。
は変更されると、String のように再作成されません。
コンストラクターを通してのみ作成できます。
StringBuffer sb = new StringBuffer();
注: オブジェクトの作成後、値シンボルを通して支払うことはできません。
sb = "welcome to here!";//error
、メモリはメモリ空間に割り当てられ、最初に null を保存します。StringBuffer
に値を支払うとき、その append メソッドを使用できます。
sb.append("hello");
str += "here";
の処理手順は、実際には StringBuffer を作成し、append() を呼び出し、最後に
次に StringBuffer を変換することです。 toSting();
こんな感じ この場合、Stringの接続操作はStringBufferと比べて追加の操作が必要となり、当然効率は落ちます
この方法では、元のオブジェクトは役に立たず、ガベージ コレクションされます。
26 個の英語文字を 5000 回追加しました。
1. 文字列 tempstr = "abcdefghijklmnopqrstuvwxyz" ;
3. 文字列 str = "";
5. < 回; i++) {
6 . str += tempstr;
7. longlen1 = System.currentTimeMillis(); 得られる結果は毎回同じではない可能性があります (通常は 46687 程度)。
46秒です。
次のコードをもう一度見てみましょう
1. String tempstr = "abcdefghijklmnopqrstuvwxyz";
2. int time = 5000;
3. long lstart2 = System.currentTimeMillis();
4.リングバッファ sb = 新しい StringBuffer( );
5. for (int i = 0; i
7. long let2 = System.currentTimeMillis();
10. System.out.println(time2);
結果は 16 ですが、場合によっては 0 になります
結論は明らかで、StringBuffer は String よりもほぼ数万倍高速です。もちろん、このデータはあまり正確ではありません。サイクル数が 100,000 回になると、その差はさらに大きくなるからです。私の言うことが信じられないなら、試してみてください。
上記によると:
str += "here";
処理ステップは、実際には StringBuffer を作成し、append() を呼び出し、最後に
次に StringBuffer toSting();
str = sb.toString();
1. 文字列 tempstr = "abcdefghijklmnopqrstuvwxyz";
2. int time = 5000;
3. int i 7.
8. str = System.currentTimeMillis();
11. System.out println(time2);
平均実行時間は約 46922、つまり 46 秒です。
要約: プログラム内の文字列を頻繁に変更して接続する必要がある場合は、StringBuffer を使用するとパフォーマンスが高くなります