java - 字符串类StringBuffer和StringBuilder叫字符串缓冲区,请问哪里体现缓冲了?
PHPz
PHPz 2017-04-18 10:31:19
0
4
654

字符串类StringBuffer和StringBuilder叫字符串缓冲区,请问哪里体现缓冲了?

PHPz
PHPz

学习是最好的投资!

全員に返信(4)
小葫芦

Java の文字列は固定長でメモリに保存されるため、文字列へのすべての追加、削除、変更には新しいメモリの作成とメモリのコピーが必要です。

StringBuffer と StringBuilder は、頻繁なメモリの適用を避けるために、通常の String の追加、削除、変更とは異なる方法で処理されます。

たとえば、「a」、「b」、「c」をそれぞれ接合します。 "a" + "b" + "c" を使用すると、(最適化なしで) Java は最初に 2 バイトのメモリを適用し、"a" と "b" をこのメモリにコピーし、次に 3 バイトのメモリを適用します。 「ab」と「c」をこのメモリにコピーします。 StringBuffer または StringBuilder を使用すると、最初に大きなメモリ (デフォルトは 16 バイト) が適用されます。結合するときは、「a」、「b」、および「c」をこのメモリに直接コピーするだけで済みます。繰り返しメモリを申請します。ここで先に申請してから使用するという形は、緩衝地帯の考え方を反映しています。

いいねを押す +0
黄舟

新しいオブジェクトは生成されません。 + が String で使用されるたびに、新しいオブジェクトが生成されます。もちろん、コンパイラーは短時間でコンパイルの最適化を実行し、バッファーは元のオブジェクトに直接追加され、新しいオブジェクトは生成されません

いいねを押す +0
Ty80

ここでは StringBuilder を例に挙げます。 StringBuilder の内部ストレージは char 配列を使用して保存されます。内部バッファーが不足している場合、システムは StringBuilder 内の char 配列にコピーします。 .arrayCopy は、非常に効率的な拡張メカニズムの実装に使用されます。これがバッファリングの実装方法です。

String d = "a" + "b" + "c"; は複数の文字列オブジェクトを生成します。上で回答したように、その理由は仮想マシン内に文字列バッファ プールがあるためです。

いいねを押す +0
Peter_Zhu

通常の「a」+「b」+「c」

「ab」文字列オブジェクトを生成します

ただし、これら 2 つのクラスを使用すると、最後の「abc」オブジェクトのみが生成されます

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート