Javaでは、String、StringBuffer、およびStringBuilderでは、プログラミングでよく使用される文字列クラスがよく使用されます。それらの違いは、インタビューでよく尋ねられる質問でもあります。ここで、それらがどのように異なり、同じであるかを要約して確認します。
1。可変および不変
文字列クラスは、文字列を使用して文字列を保存します。次のように:「最終」モディファイアがあるため、文字列オブジェクトが不変であることがわかります。
プライベートファイナルチャーバリュー[];
StringBuilderとStringBufferの両方が、AbstractStringBuilderクラスから継承されます。 AbstractStringBuilderでは、文字列を保存するために文字配列が使用されます。次のように、両方のオブジェクトが可変であることがわかります。
char [] value;
2。マルチスレッドで安全ですか?
文字列内のオブジェクトは不変であるため、定数として理解できます。これは明らかにスレッドセーフです。
AbstractStringBuilderは、StringBuilderとStringBufferのパブリック親クラスであり、拡張性、追加、挿入、IndexOF、その他のパブリックメソッドなどの文字列の基本操作を定義します。
StringBufferは、メソッドに同期ロックまたは呼び出されたメソッドに同期ロックを追加したため、スレッドセーフです。次のソースコードを参照してください。
public synchronized stringbuffer Reverse(){super.reverse(); return this;} public int indexof(string str){return indexof(str、); // public Synchronized ind indexof(string str、int fromindex)メソッドがあります} StringBuilderはこのメソッドに同期ロックを追加しないため、非読み取りセーフです。
3。StringBuilderとStringBufferの共通
StringBuilderとStringBufferには、パブリック親クラスAbstractStringBuilder(要約クラス)があります。
抽象クラスとインターフェイスの違いの1つは、サブクラスの公開方法を抽象クラスで定義できることです。サブクラスは、新しい機能を追加するだけで、既存のメソッドを繰り返す必要はありません。一方、インターフェイスはメソッドと定数のみを定義します。
StringBuilderとStringBufferの方法は、super.append(...)などの抽象ストリングビルダーのパブリックメソッドを呼び出します。 StringBufferがメソッドに同期されたキーワードを追加し、同期するだけです。
最後に、プログラムがマルチスレッドされていない場合、StringBuilderの使用はStringBufferよりも効率的です。
javaの文字列stringbuffer stringbuilderの違いの要約
*文字列クラスは不変のクラスです。文字列が変更されている限り、新しいオブジェクトが生成されます。
* StringBufferとStringBuilderはどちらも可変クラスであり、文字列の変更によって新しいオブジェクトは生成されません。
実際に使用する場合、挿入、削除など、文字列を変更する必要がある場合がある場合。
*しかし、StringBufferとStringBuilderの違いは何ですか?
StringBufferはスレッドセーフであり、マルチスレッドプログラムで使用するのに非常に便利ですが、プログラムの効率は遅くなります。
StringBuilderはスレッドセーフではなく、単一のスレッドのStringBufferよりも効率的です。
*一般に、3つの実行時間:
文字列> stringbuffer> stringbuilder