推奨されます, 2019

エディターズチョイス

JavaのStringクラスとStringBufferクラスの違い

StringとStringBufferはどちらも文字列を操作するクラスです。 StringBufferクラスはStringクラスのピアクラスです。 Stringクラスのオブジェクトは固定長です。 StringBufferクラスのオブジェクトは拡大可能です。 StringとStringBufferの基本的な違いは、“ String”クラスのオブジェクトは不変であるということです。 クラス "StringBuffer"のオブジェクトは変更可能です。

比較表

比較基準ひも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()"を使用しました。

Stringオブジェクトは不変であるため、ストリング「Teckpix」は変更されず、新しいストリング「Solution」はストリング定数プール内に別のオブジェクトを作成します。 しかし、オブジェクト "Solution"への参照はどのオブジェクトにもキャッチされないため、オブジェクトSolutionへの参照は文字列定数プールにまだ存在していますが失われます。 オブジェクトTeckpixは変更されていないので、先にTeckpixの参照を割り当てたオブジェクトstrを印刷すると、文字列“ Teckpix”のみが印刷されます。

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の主な違い

  1. Stringオブジェクトの長さは固定されていますが、StringBufferのオブジェクトの長さは必要に応じて増やすことができます。
  2. Stringオブジェクトは不変です。つまり、そのオブジェクトを再度割り当てることはできません。一方、StringBufferのオブジェクトは可変です。
  3. Stringオブジェクトはパフォーマンスが遅くなりますが、StringBufferオブジェクトは速くなります。
  4. Stringオブジェクトはより多くのメモリを消費しますが、StringBufferオブジェクトはより少ないメモリを消費します。
  5. Stringオブジェクトは定数プールに格納され、StringBufferオブジェクトはヒープメモリに格納されます。

結論:

StringBufferオブジェクトはStringクラスに比べて文字列により多くの機能を提供します。 したがって、StringクラスではなくStringBufferを使用することをお勧めします。

Top