JavaでのStringクラスとStringBufferクラスの違い
コンテンツ
StringとStringBufferはどちらも文字列を操作するクラスです。 StringBufferクラスは、クラスStringのピアクラスです。 Stringクラスのオブジェクトは固定長です。 StringBufferクラスのオブジェクトは拡張可能です。 StringとStringBufferの基本的な違いは、「String」クラスのオブジェクトが 不変。クラス「StringBuffer」のオブジェクト 可変.
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | ひも | StringBuffer |
---|---|---|
ベーシック | Stringオブジェクトの長さは固定されています。 | StringBufferの長さを増やすことができます。 |
変形 | 文字列オブジェクトは不変です。 | StringBufferオブジェクトは可変です。 |
性能 | 連結中は遅くなります。 | 連結中は高速です。 |
記憶 | より多くのメモリを消費します。 | より少ないメモリを消費します。 |
ストレージ | 文字列定数プール。 | ヒープメモリ。 |
文字列の定義
「文字列」はJavaのクラスです。 Stringクラスのオブジェクトは固定長であり、最も重要なことは、Stringクラスのオブジェクトは「不変」であることです。 Stringオブジェクトを初期化すると、そのオブジェクトを再度変更することはできません。クラスStringのオブジェクトは、ストリング定数プールに格納されます。
文字列を作成するときはいつでも、まずそれを理解しましょう。文字列型のオブジェクトを作成します。文字列定数も文字列オブジェクトです。
System.out.ln( "Hello this is Teckpix Solution");
上記のステートメントでは、文字列「Hello this is Teckpix Solution」は文字列定数です。
次に、例を使用してStringオブジェクトの可変性を理解しましょう。
文字列str = new文字列( "Teckpix"); str.concat( "Solution"); system.out.ln(str); // Teckpixを出力します
上記のコードでは、2つの文字列「Teckpix」と「Solution」を連結しようとしました。文字列が作成されるたびに、つまりString型のオブジェクトが作成されることを知っています。したがって、文字列「Teckpix」はオブジェクトを作成し、その参照は文字列オブジェクト「str」に割り当てられます。次に、クラスStringのメソッド「concat()」を使用して、別のストリング「Solution」をストリング「Teckpix」と連結しようとしました。
Stringオブジェクトは不変なので、文字列「Teckpix」は変更されず、新しい文字列「Solution」は文字列定数プールに別のオブジェクトを作成します。ただし、オブジェクト「Solution」への参照はどのオブジェクトにもキャッチされないため、オブジェクトSolutionへの参照は失われますが、文字列定数プールにはまだ存在します。オブジェクトTeckpixは変更されないため、先にTeckpixの参照を割り当てたオブジェクトstrが文字列「Teckpix」のみになります。StringBufferの定義
クラス「StringBuffer」は、クラス「String」のピアクラスです。クラスStringBufferは、文字列により多くの機能を提供します。 StringBufferクラスのオブジェクトは変更可能であり、そのオブジェクトは変更可能です。 StringBufferオブジェクトの長さは拡張可能です。 StringBufferオブジェクトに割り当てられた文字列リテラルの途中または末尾に文字または部分文字列を挿入できます。 StringBufferは、特定の長さが要求されない場合、16文字の追加のスペースを割り当てます。
例の助けを借りて、StringBufferオブジェクトの可変性を理解しましょう。
StringBuffer Sb = new StringBuffer( "Teckpix"); Sb.append( "Solution"); system.out.ln(Sb); // Teckpixソリューションを出力します
知っているように、StringBufferオブジェクトは可変です。メソッドappend()は、最初にオブジェクト「Teckpix」の参照が以前に割り当てられたStringBufferオブジェクトSbを変更します。メソッドappend()は、新しい文字列リテラル「Solution」を文字列リテラル「Teckpix」の最後に追加します。オブジェクトSbを変更すると、変更された文字列オブジェクト「Teckpix Solutions」になります。
- Stringオブジェクトの長さは固定されていますが、必要に応じてStringBufferのオブジェクトの長さを増やすことができます。
- Stringオブジェクトは不変です。つまり、StringBufferのオブジェクトは変更可能ですが、オブジェクトを再度再割り当てすることはできません。
- StringBufferオブジェクトは高速ですが、Stringオブジェクトはパフォーマンスが低下します。
- Stringオブジェクトはより多くのメモリを消費しますが、StringBufferオブジェクトはより少ないメモリを消費します。
- 文字列オブジェクトは定数プールに格納されますが、StringBufferオブジェクトはヒープメモリに格納されます。
結論:
StringBufferオブジェクトは、文字列クラスに比べて文字列により多くの機能を提供します。したがって、クラスStringではなくStringBufferを使用することをお勧めします。