ホームページ  >  記事  >  Java  >  String、StringBuffer、StringBulider の概要

String、StringBuffer、StringBulider の概要

零下一度
零下一度オリジナル
2017-06-23 09:32:291453ブラウズ

これら 3 つはすべて CharSequence インターフェイスを実装しているため、CharSequence は文字列プロトコル インターフェイスとみなすことができます

1。String クラスは不変クラスです。つまり、String オブジェクトが作成されると、このオブジェクトに含まれる文字シーケンスは変更されるまで変更されません。オブジェクトは破棄されます。

String str = new String ("define me"); を定義すると、

出力は、 Str のようになります。実際、 str のポインティングは変更されており、ヒープメモリ内の元のオブジェクトはゴミになっています

2. StringBuffer クラス

StringBuffer が作成されると、 insert() によって、 append()、reverse()、serChaAt()、setLength() メソッドはこの文字列を変更できます。最終生成後、toString() メソッドを通じて String オブジェクトに変換できます

3 は JDK1.5 の新機能です。も、StringBuffer と同様に文字列オブジェクトを表します。2 つのクラスのコンストラクターとメソッドは基本的に同じです。当時、StringBuffer はスレッド セーフであり、StringBulider はスレッド セーフを実装していなかったので、パフォーマンスはわずかに高かったです。したがって、可変文字を含む文字列オブジェクトを作成する場合は、StringBuilder クラスを優先する必要があります

Comparison

1。実行速度の観点から、この 3 つは次の関係になります:

StringBuilder>StringBuffer>String;


2 .: 1. 長さ 両方とも拡張可能です。 2. StringBuffer はスレッド セーフですが、StringBuilder はスレッド セーフではありません。それでは、その長さはどのように動的に拡張され、StringBuffer のスレッド セーフはどのように実装されるのでしょうか?

これら 3 つはすべて CharSequence インターフェイスを実装しているため、CharSequence は文字列プロトコル インターフェイスとみなすことができます

構築メソッドを除く StringBuffer 内のすべてのメソッドは synchronized によって制限されます

2 つの拡張可能な長さは、ensureCapacity(int minimumCapacity) に渡されます現在の長さがパラメータ minimumCapacity より小さいかどうかを確認し、true の場合はスペースを割り当てます。新しいスペースを割り当てるステップ サイズは 2 倍 (現在の長さ + 1) です。

以上がString、StringBuffer、StringBulider の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。