Java の String、StringBuffer、StringBuilder の違いの概要
JavaのString、StringBuffer、StringBuilderはプログラミングでよく使われる文字列クラスで、これらの違いは面接でもよく聞かれる質問です。次に、それらの違いと類似点を要約して見てみましょう。
1. 可変と不変
以下に示すように、String クラスは文字配列を使用して文字列を保存します。これは、「final」修飾子により、文字列オブジェクトが不変であることがわかります。
private Final char value[];
StringBuilder と StringBuffer はどちらも AbstractStringBuilder クラスを継承しており、以下に示すように、文字配列も文字列の保存に使用されます。
char[] value;
2. マルチスレッドセーフですか?
String 内のオブジェクトは不変であり、定数として理解できるため、明らかにスレッドセーフです。
AbstractStringBuilder は StringBuilder と StringBuffer の共通の親クラスで、expandCapacity、append、insert、indexOf、その他のパブリック メソッドなどの文字列のいくつかの基本的な操作を定義します。
StringBuffer はメソッドに同期ロックを追加するか、呼び出し元のメソッドに同期ロックを追加するため、スレッドセーフです。以下のソース コードを見てください:
public synchronized StringBuffer reverse() { super.reverse(); return this; } public int indexOf(String str) { return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法 }
StringBuilder はメソッドに同期ロックを追加しないため、スレッドセーフではありません。
3. StringBuilder と StringBuffer の共通点
StringBuilder と StringBuffer には、AbstractStringBuilder (抽象クラス) という共通の親クラスがあります。
抽象クラスとインターフェイスの違いの 1 つは、抽象クラスはサブクラスの一部のパブリック メソッドを定義する必要があるのに対し、インターフェイスはメソッドと定数の定義を宣言するだけであるということです。
StringBuilder と StringBuffer のメソッドは、super.append(...) など、AbstractStringBuilder のパブリック メソッドを呼び出します。 StringBuffer が同期用のメソッドに synchronized キーワードを追加するだけです。
最後に、プログラムがマルチスレッドでない場合は、StringBuffer よりも StringBuilder を使用する方が効率的です。
Java の String、StringBuffer、StringBuilder の違いを紹介するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Javaリモートデバッグでの絶え間ない買収に関する質問と回答は、Javaをリモートデバッグに使用する際に、困難な現象に遭遇する可能性があります。それ...

初心者向けのJavaプロジェクト管理ツールを選択することと混同します。バックエンド開発を学び始めたばかりの人にとっては、適切なプロジェクト管理ツールを選択することが重要です...

TomcatがSpring-WEBモジュールをロードするときのSPIメカニズムのクラス負荷挙動の分析。 Tomcatは、Spring-WebモジュールをロードするときにSpring-Webが提供するServleを発見して使用するために使用されます...

Websocketサーバーが401を返した後、ブラウザの反応しないメソッド。Nettyを使用してWebsocketサーバーを開発すると、トークンを確認する必要があることがよくあります。 �...

PyflinkのジョブをYARNに送信するときにPythonスクリプトが見つからない理由の分析Yarnを介してPyflinkジョブを提出しようとすると、遭遇する可能性があります...

開発プロセス中にJavaでエンティティクラスのアノテーションのパラメーターを動的に構成する方法は、さまざまな環境に応じて注釈パラメーターを動的に構成する必要性に遭遇することがよくあります...

分散システム分散トランザクション処理における最終的な一貫性の適用を調査することは、分散システムアーキテクチャにおいて常に問題となっています。問題を解決するために...

OAUTH2.0のAccess_Tokenを使用して、インターフェイスアクセス許可を制御する方法は? OAuth2.0の適用では、...
