ホームページ Java &#&チュートリアル Java の String、StringBuffer、StringBuilder の違いの概要

Java の String、StringBuffer、StringBuilder の違いの概要

Jan 22, 2017 am 11:31 AM

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 サイトに注目してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Javaリモートデバッグでは、リモートサーバーで一定の値を正しく取得するにはどうすればよいですか? Javaリモートデバッグでは、リモートサーバーで一定の値を正しく取得するにはどうすればよいですか? Apr 19, 2025 pm 01:54 PM

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

バックエンド開発を学習するときにJavaプロジェクト管理ツールを選択する方法は? バックエンド開発を学習するときにJavaプロジェクト管理ツールを選択する方法は? Apr 19, 2025 pm 02:15 PM

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

TomcatがSpring-Webモジュールをロードすると、SPIメカニズムはJavaクラスローダーの可視性の原理を本当に破壊しますか? TomcatがSpring-Webモジュールをロードすると、SPIメカニズムはJavaクラスローダーの可視性の原理を本当に破壊しますか? Apr 19, 2025 pm 02:18 PM

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

WebSocketサーバーが401を返した後、ブラウザが応答しない理由は何ですか?それを解決する方法は? WebSocketサーバーが401を返した後、ブラウザが応答しない理由は何ですか?それを解決する方法は? Apr 19, 2025 pm 02:21 PM

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

糸でpyflinkジョブを送信するときにエラーを報告するのはなぜですか? 糸でpyflinkジョブを送信するときにエラーを報告するのはなぜですか? Apr 19, 2025 pm 02:06 PM

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

ProjectがJavaで開始されたときにEasypoiでの@excel AnnotationのSavePathパラメーターを動的に変更する方法は? ProjectがJavaで開始されたときにEasypoiでの@excel AnnotationのSavePathパラメーターを動的に変更する方法は? Apr 19, 2025 pm 02:09 PM

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

分散システムの最終的な一貫性:適用する方法とデータの矛盾を補う方法は? 分散システムの最終的な一貫性:適用する方法とデータの矛盾を補う方法は? Apr 19, 2025 pm 02:24 PM

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

OAUTH2.0のスコープメカニズムを介して、ネストされたH5ページの特定のインターフェイスへのアクセスを制限する方法は? OAUTH2.0のスコープメカニズムを介して、ネストされたH5ページの特定のインターフェイスへのアクセスを制限する方法は? Apr 19, 2025 pm 02:30 PM

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

See all articles