これら 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 サイトの他の関連記事を参照してください。