008-JavaのStringBuilderのとStringBufferの

StringBufferの和のStringBuilder

文字列とは異なり、
  • 文字列のJavaの非常に重要なクラスは、最終クラスを宣言しています。このプロパティをハッシュに加えて、他のプロパティは、最終として宣言された。それは文字列の連結に来るときに、文字列オブジェクトは、仲介の多くを持つことになりますし、存在する場合、したがって、頻繁スプライシング動作は、パフォーマンスが低下します。
  • StringBufferをあまりにも多くの中間のオブジェクトによって引き起こされる低性能の現象で文字列の連結結果の多くを解決するために使用されたStringBuffer。自然のStringBufferは文字の並びを変更するには、スレッドセーフで、すべてのデータ変更方法は同期追加されます。同時に、スレッドセーフを確保すると同時に、パフォーマンスを犠牲もあります。
  • StringBuilder以来、注意せずに、生成した中間ステッチスレッドセーフなオブジェクトのStringBuilderなし。そして、StringBufferの悪くない、ただスレッドセーフ削除します。
    ときに我々どのように単語の文字列連結の振る舞いので、文字列の方が適切である使用しないようにしてみてください。(拡張が再オープンしますので、アレイ移植のスペースを)同時に、膨張によるオーバーヘッドを回避するために、容量を設定した文字列の大きさを推定してみてください。
    たStringBufferとのStringBuilderはAbstractStringBuilder、底層を継承チャーアレイを使用して変更可能です。

    文字列定数プール

    JavaのStringオブジェクトのマルチセクションのコピーが多数を避けるために、文字列定数プールは、導入された同じ文字列定数を持っています。
    戦略:(1)文字列(文字列str =「AABBCC」)を作成し 、 第一、もしあれば、オブジェクトが文字列定数プールと同じ値を有するかどうかのチェックが再度作成されますが、直接参照によって渡されないであろう;もしいいえ、それは文字列定数プールに応じて作成され、その後、参照によって渡されます。(2)使用した場合しかし、new String("aabbcc")文字列を作成するとき、この定数プール文字列定数が存在する場合、それはチェックしない、定数プールが作成されず、むしろ直接ヒープに対応するオブジェクトを作成します。

(1)String str = "aa" + "bb" + "cc"
スプライシングような文字列を、直接「AABBCC」相合成をコンパイルし、対応する文字列定数プールに行きます。
(2)文字列STR1は= STR + +「EE」+「FF」「DD」
のStringBuilderスプライシングを作成しながら、これにスプライス方法を追加し、その後、でも最初の変数とします。
これらの2つの方法は、接合作業が非常に頻繁ではない前提で、何ら問題は、文字列を使用して、存在しない
(3)次のコード

    String s1 = "aa" + "bb" + "cc";
    String s2 = "dd" + "ee" + "ff";
    String s3 = new String("gg");
    String s4 = s1 + s2;

上記のセクション、いくつかの新しい新しいStringBuilderのは、このように直接コンビニエンスStringBuilderのに使用されます。

一般的な使用のStringBuffer

StringBuilderのSTRB =新しいStringBuilderの( "AABBCCDD");

  • strb.append("ee") STRBの最後に追加指定された文字(結果:aabbccddee)
  • strb.reverse() 文字列の反転(結果:eeddccbbaa)
  • strb.delete(1,5)ストリングの位置5にSTRB位置1を削除します。(結果(5を含む1ではなく含む):)
  • strb.insert(1,"zzz");STRBの第二位置に挿入ZZZ。(結果:czzzbbaa)
  • strb.replace(2, 5, "yyy"); ストリング2の位置まで5(5を含まない1を含むが、)YYY置換位置を用いている(結果:czyyybaa)

おすすめ

転載: www.cnblogs.com/Sinkinghost/p/11537376.html