1、プラス
プラス根底にある文字列の連結はStringBuilderの通話を実現し、「」+「b」は、次のコードと同等です:
列A = "" ; StringBuilderのABは = 新しいStringBuilderのを(); ab.append().append( "B" )。 文字列STR = ab.toString()。
しかし、各ステッチプラス記号とStringBuilderオブジェクトを作成し、そして最後のtoString()メソッドは、Stringオブジェクトを生成します一度ので、プラスステッチの直接の使用は、StringBuilderの効率を達成することができることを言っていません。StringBuilderオブジェクトが10万、10万Stringオブジェクトが生成されますサイクルの数千倍のモザイクは、効率が非常に良いではありません。
2、連結スプライシング
連結は、配列bufに文字の種類を申請した、実際には、基本となるソースコードを参照してください、この配列に入れ、最終的にはStringオブジェクトに変換されたスプライス文字列にする必要があります。
パブリック文字列連結(文字列str){ int型 otherLen = str.length()。 もし(otherLen == 0 ){ 戻り 、これを。 } int型のlen = value.length。 チャー BUF [] = Arrays.copyOf(値、LEN + otherLen)。 str.getChars(BUF、LEN)。 リターン 新しい文字列(BUF、真の); }
3、StringBuilderを/ StringBufferの
CONCATENATE文字列に親クラスAbstractStringBuilderのappendメソッドを呼び出すことにより、StringBufferのは、そのため、スレッドセーフで、sychronizedキーワードを追加する方法を追加しますが、StringBuilderのスレッドが安全ではありません。
ビューソースは、主要な原則が使用可能な容量拡張の配列があることを確認するためにensureCapacityInternalの方法により保存された文字の文字の配列の使用であることがわかりました。
公共AbstractStringBuilderアペンド(文字列str){ 場合(STR == NULL ) リターンappendNull()。 INT LEN = str.length()。 ensureCapacityInternal(数 + LEN)。 str.getChars( 0 、lenは、値、カウント数)。 カウント + = LEN。 返す これを。
}