検索
ホームページJava&#&チュートリアルJava の String、StringBuffer、StringBuilder の違いと原則

最初に String について話しましょう:

Java の String、StringBuffer、StringBuilder の違いと原則

String オブジェクトが作成されると、その値は変更できません。変更したい場合は、変更されたオブジェクト、つまり String 参照を保存するためにメモリ空間を開きます。

String の最下層は値の格納に配列を使用するため、配列の長さを変更することができず、上記の問題が発生します。

‌実際の開発プロセスで特定の文字列を頻繁に変更する必要がある場合、String を使用するとメモリ領域の無駄が発生します。この問題はどのように解決すればよいでしょうか? ‌

答えは、StringBuffer を使用してこの問題を解決することです。

StringBuffer について詳しく説明しましょう:

‌StringBuffer は String に似ています。最下層でも配列を使用して文字列の値とデフォルトの長さを保存します配列の長さは 16、つまり空の StringBuffer オブジェクト

オブジェクトです。配列の長さは 16 です。 StringBuffer オブジェクトをインスタンス化すると、16 文字の文字列バッファが作成されます。

しかし、パラメーター化されたコンストラクターを呼び出して StringBuffer オブジェクトを作成すると、配列の長さは 16 ではなくなりますが、配列の長さは現在のオブジェクトの値に基づいて決定されます。 ##配列の長さ 長さは「現在のオブジェクトの値16の長さ」です。

したがって、StringBuffer が作成された後、その値を変更するための 16 文字のスペースが存在します。変更された値の範囲が 16 文字を超える場合は、

StringBuffer オブジェクトの元の char 配列の容量が新しい文字列を保持できるかどうかが最初にチェックされ、保持できない場合は char 配列が拡張されます。

StringBuffer はどのように拡張されるのでしょうか?

拡張のロジックは、新しい char 配列を作成し、既存の容量を 2 倍にして 2 を追加することです。それでも十分な大きさでない場合は、必要な容量と直接等しくなります。展開が完了したら、元の配列の内容を新しい配列にコピーし、最後にポインタを新しい char 配列にポイントします。

StringBuffer の兄弟である StringBuilder を見てみましょう。

StringBuilder と StringBuffer は同じ親クラス AbstractStringBuilder を持ち、実装されたインターフェイスはまったく同じで、どちらも実装されています java.io.Serializable、CharSequence の 2 つのインターフェイス。

では、両者の違いは何でしょうか?

最大の違いは、StringBuffer はほぼすべてのメソッドの同期を実装し、スレッドは比較的安全で、マルチスレッド システムではデータ同期を保証できることですが、StringBuilder はそうではないことです。同期を実装します。これはスレッドセーフではないため、StringBuilder はマルチスレッド システムでは使用できません。

StringBuffer と StringBuilder の使用シナリオ:

スレッド セーフティを考慮する必要がある場合は StringBuffer を使用します。スレッド セーフティを考慮する必要がない場合は、次の場合に使用できます。効率を追求したシナリオ。

以上がJava の String、StringBuffer、StringBuilder の違いと原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
クラウドコンピューティングは、Javaのプラットフォーム独立の重要性にどのような影響を与えますか?クラウドコンピューティングは、Javaのプラットフォーム独立の重要性にどのような影響を与えますか?Apr 22, 2025 pm 07:05 PM

クラウドコンピューティングにより、Javaのプラットフォームの独立性が大幅に向上します。 1)JavaコードはBytecodeにコンパイルされ、異なるオペレーティングシステムでJVMによって実行され、クロスプラットフォーム操作が確保されます。 2)DockerとKubernetesを使用してJavaアプリケーションを展開して、携帯性とスケーラビリティを向上させます。

Javaのプラットフォームの独立性は、その広範な採用においてどのような役割を果たしましたか?Javaのプラットフォームの独立性は、その広範な採用においてどのような役割を果たしましたか?Apr 22, 2025 pm 06:53 PM

java'splatformendenceallowsdevelopersowritecodeodeonceanceandonitondeviceoros withajvm.

コンテナ化テクノロジー(Dockerなど)は、Javaのプラットフォーム独立性の重要性にどのように影響しますか?コンテナ化テクノロジー(Dockerなど)は、Javaのプラットフォーム独立性の重要性にどのように影響しますか?Apr 22, 2025 pm 06:49 PM

Dockerなどのコンテナ化技術は、Javaのプラットフォームの独立性を置き換えるのではなく、強化します。 1)環境全体の一貫性を確保し、2)特定のJVMバージョンを含む依存関係を管理する、3)展開プロセスを簡素化して、Javaアプリケーションをより順応性と管理しやすくする。

Javaランタイム環境(JRE)の重要なコンポーネントは何ですか?Javaランタイム環境(JRE)の重要なコンポーネントは何ですか?Apr 22, 2025 pm 06:33 PM

JREはJavaアプリケーションが実行される環境であり、その機能は、Javaプログラムが再コンパイルなしで異なるオペレーティングシステムで実行できるようにすることです。 JREの実用的な原則には、JVMがBytecodeを実行することが含まれます。クラスライブラリは、事前定義されたクラスとメソッド、構成ファイル、リソースファイルを提供して実行中の環境をセットアップします。

基礎となるオペレーティングシステムに関係なく、JVMがメモリ管理をどのように処理するかを説明します。基礎となるオペレーティングシステムに関係なく、JVMがメモリ管理をどのように処理するかを説明します。Apr 22, 2025 pm 05:45 PM

JVMは、自動メモリ管理とガベージコレクションを通じて効率的なJavaプログラムを確実に実行します。 1)メモリの割り当て:新しいオブジェクトのヒープ内のメモリを割り当てます。 2)参照カウント:オブジェクトの参照を追跡し、ゴミを検出します。 3)ガベージのリサイクル:タグクリア、タグチディ、またはコピーアルゴリズムを使用して、もはや参照されていないオブジェクトをリサイクルします。

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか?Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか?Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は?エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は?Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1

メモ帳++7.3.1

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