Javaの、文字列、StringBufferの、StringBuilderの差

文字列クラスは、文字列の後に作成されたものは変更されません表すために使用され、それは不変年代。

StringBufferのクラスは、変数、文字列の内容を表し、基礎となる文字列を修正する方法を提供するために使用されます。文字列バッファを安全に使用することができる複数のスレッド特定の例ですべての操作があれば発生のシリアル順序、および順次一貫各スレッドに向け方法順次呼び出しであるように、これらの方法は、同期化されるときに必要であるかもしれません。私たちは、文字をスプライシングすると、後者の百倍より速いので元、Stringクラスの代わりにStringBufferクラスを使用します。

StringBuilderのクラスは、以下のように設計されたStringBufferドロップイン置換、文字列バッファに使用されるが、単一のスレッド使用時に(一般的です)。可能ならばほとんどの実装では、それは超えているので、我々は、そのような優先順位の使用を推奨StringBufferする速いです。

例:

文字列str =「あなたはいいです。 ;のStr + = 『私はそんなにあなたを愛しています。』;」 それはStringBufferクラスとしては、以下の場合:

StringBufferの列str =新しいStringBufferの(「あなたは いいです。」); Str.append(「私はそんなにあなたを愛しています。」); 唯一のStringクラスのプラス記号(+)の顔から、文字列の連結を完了し、クラスは、よりシンプルで純粋を実装するかどうか、StringBufferのはappend()メソッドを呼び出す必要があり?:実際には、何が起こっているか実行者は、内部プログラムを見てみましょう  プログラムのバイトコードコンパイラ(バイトコード)を介して本質を実証した:Stringクラスのオブジェクトを直接スプライスするとき、JVMは、一時的なStringBufferクラスのオブジェクトを作成します。私はあなたをとても愛して」と文字列クラスは不変であるため、文字列の連結を完了するために、そのAPPEND()メソッドを呼び出し、スプライシング操作は、StringBufferクラスを使用する必要があります(と--jvmます「あなたはいいです。」と、 。「)は、2つの新しいStringオブジェクトを作成します。その後、一時的なStringBufferオブジェクトは、その後、Stringにコストのかかるを移行します!この単純な1つのスプライシング過程で見られ、私たちは、プログラムは4つのオブジェクトを作成してみましょう:2がString、一時的にStringBuffer、StringBufferのにスプライシングされ、最終的にString--に変換するために、それは確かにオリジナルのSTRではありません、参照名は変更されていませんが、それは、新しいStringオブジェクトを指します。 初期スプライシングは(「私はあなたをとても愛しています。とき文字列とStringBufferの:あなたが直接StringBufferクラスを使用する場合と、プログラムは2つだけのオブジェクトを生成します  」)、そして、もはや一時的なStringBufferクラスのオブジェクトを作成し、バックStringオブジェクトに変換しておく必要があります。我々の文字列が直接行動は、追加のオーバーヘッド、どのくらい役に立たない一時的なStringBufferオブジェクトの生成、および何回不要なキャスト処理そのうちの数をもたらすStringクラスにスプライシングされた複数のセグメントをリサイクルする際に、想像してみてください。






ます。https://www.cnblogs.com/moiyer/archive/2011/11/24/2316152.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33692284/article/details/94693179