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

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

Oct 21, 2019 pm 04:40 PM
java

最初に 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 サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++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の平方根 Aug 30, 2024 pm 04:26 PM

Javaの平方根

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Javaの完全数

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーター

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Javaのアームストロング数

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

ジャワのウェカ

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

Java Springのインタビューの質問

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8 Stream Foreachから休憩または戻ってきますか?

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Javaのスミス番号

See all articles