以下の文字列の連結を分析しましょう。
1.ストリング
図に示すように、文字列のソースコードを開きます
文字列を保存する文字値は最終定数であることがわかります。文字列の構築方法を見ると、文字列の値は構築方法によって決定されることがわかりました。ここでキーワードの最終を説明する必要があります
最終的に変更された属性は定数です(値を変更できません)。それは、それを宣言している間に値を割り当てられるか、建設方法に値を割り当てられます。割り当てられたら、変更できません。
したがって、文字列を使用して文字列ステッチを実装します。文字列の値を変更できないため、新しい文字列を保存するために、ステッチごとに新しい文字列を生成する必要があります。したがって、文字列を使用して文字列ステッチを処理すると、パフォーマンスが非常に低くなります。
文字列の詳細については、ブログを参照してください:http://longpo.iteye.com/blog/2199493
2.StringBuffer
StringBufferクラスは、Abstract Class AbstractStringBuilderクラスを継承し、AbstractStringBuilderソースコードを開きます。
3つのオーバーロード方法を見てみましょう
親クラスのすべてのコンストラクターは、抽象的なストリングビルダーと呼ばれていることがわかります。
StringBufferのデータがデータを保存するCharアレイは最終タイプではないことがわかりました。つまり、変更される可能性があり、構築された文字列にはまだ文字列をスプライスする自由スペースがあります。
stringbufferでは、append()関数をスプライス文字列に使用します。チャーアレイにはまだ残っていますが、常にスプライスするだけでは十分ではないと思います。したがって、追加関数のソースコードの実装を調べる必要があります。
親クラスの追加方法をチェックしてくださいabstractStringBuilder
値アレイが十分な容量がない場合、文字列を保存するために新しい値アレイが作成されます。この時点で、StringBuffer Stringスプライシングの原理を理解する必要があります。 char値アレイが不十分な場合、保存するために大きな容量アレイが作成されます。効率は弦の効率よりも大幅に高くなっています。
3.StringBuilder
StringBuilderとStringBufferは2人の兄弟であり、その使用法は基本的に同じです。違いは、StringBufferが同期してスレッドセーフであり、StringBuilderは同期とスレッドセーフを保証しないことです。
StringBuilderはほとんどの実装でStringBufferよりも高速であり、文字列バッファーが単一のスレッドでアクセスされる場合、最初にStringBuilderを使用することをお勧めします。
上記は、編集者によって導入されたJava文字列の選択です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!