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