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、0); // 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の違いに関する詳細な分析は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。