ホームページ > Java > &#&チュートリアル > JAVAのStringとStringBufferの違い

JAVAのStringとStringBufferの違い

巴扎黑
リリース: 2016-12-20 11:38:15
オリジナル
898 人が閲覧しました

String と StringBuffer の違いはインターネット上で無数にあると言えますが、この記事を見たとき、その中にある小さな例が非常に代表的であると感じたので、それを参照して自分で要約してみました。

Javaにはキャラクターの操作を担当するクラスが3つあります。

1.Character は単一の文字を操作し、

2.String は文字列を操作します。不変クラス。

3.StringBuffer も文字列を操作しますが、これは変数クラスです。

String:
はプリミティブ型ではないオブジェクトです。
作成された値は変更できません。
既存の String オブジェクトを変更するには、新しいオブジェクトを作成してから、
String は最終クラスです。つまり、継承できません。

StringBuffer:

は変更されると、String のように再作成されません。
コンストラクターを通してのみ作成できます。
StringBuffer sb = new StringBuffer();
注: オブジェクトの作成後、値シンボルを通して支払うことはできません。
sb = "welcome to here!";//error
、メモリはメモリ空間に割り当てられ、最初に null を保存します。StringBuffer
に値を支払うとき、その append メソッドを使用できます。
sb.append("hello");

StringBuffer は文字列内の String よりも効率的です。接続操作:

String str = new String("welcome to ");

str += "here";
の処理手順は、実際には StringBuffer を作成し、append() を呼び出し、最後に
次に StringBuffer を変換することです。 toSting();
こんな感じ この場合、Stringの接続操作はStringBufferと比べて追加の操作が必要となり、当然効率は落ちます

そしてStringオブジェクトは不変オブジェクトなので、Stingが操作されるたびに、新しいオブジェクトは新しい値を保存するために再確立されます。

この方法では、元のオブジェクトは役に立たず、ガベージ コレクションされます。

次のコードを見てください:

26 個の英語文字を 5000 回追加しました。
1. 文字列 tempstr = "abcdefghijklmnopqrstuvwxyz" ;

2. int 回 = 5000;

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 6. sb.append(tempstr);
7. long let2 = System.currentTimeMillis();

9. - lstart2);

10. System.out.println(time2);
結果は 16 ですが、場合によっては 0 になります
結論は明らかで、StringBuffer は String よりもほぼ数万倍高速です。もちろん、このデータはあまり正確ではありません。サイクル数が 100,000 回になると、その差はさらに大きくなるからです。私の言うことが信じられないなら、試してみてください。



上記によると:

str += "here";
処理ステップは、実際には StringBuffer を作成し、append() を呼び出し、最後に
次に StringBuffer toSting();

so str + = "here"; は

StringBuffer と同等にすることができます sb = new StringBuffer(str);

sb.append("here");


str = sb.toString();

したがって、上記は "+ " String を接続するコードは、基本的に次のコードと同等になります

1. 文字列 tempstr = "abcdefghijklmnopqrstuvwxyz";
2. int time = 5000;
3. int i 7.
8. str = System.currentTimeMillis();
11. System.out println(time2);
平均実行時間は約 46922、つまり 46 秒です。



要約: プログラム内の文字列を頻繁に変更して接続する必要がある場合は、StringBuffer を使用するとパフォーマンスが高くなります

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート