84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
字符串类StringBuffer和StringBuilder叫字符串缓冲区,请问哪里体现缓冲了?
学习是最好的投资!
Java の文字列は固定長でメモリに保存されるため、文字列へのすべての追加、削除、変更には新しいメモリの作成とメモリのコピーが必要です。
StringBuffer と StringBuilder は、頻繁なメモリの適用を避けるために、通常の String の追加、削除、変更とは異なる方法で処理されます。
たとえば、「a」、「b」、「c」をそれぞれ接合します。 "a" + "b" + "c" を使用すると、(最適化なしで) Java は最初に 2 バイトのメモリを適用し、"a" と "b" をこのメモリにコピーし、次に 3 バイトのメモリを適用します。 「ab」と「c」をこのメモリにコピーします。 StringBuffer または StringBuilder を使用すると、最初に大きなメモリ (デフォルトは 16 バイト) が適用されます。結合するときは、「a」、「b」、および「c」をこのメモリに直接コピーするだけで済みます。繰り返しメモリを申請します。ここで先に申請してから使用するという形は、緩衝地帯の考え方を反映しています。
新しいオブジェクトは生成されません。 + が String で使用されるたびに、新しいオブジェクトが生成されます。もちろん、コンパイラーは短時間でコンパイルの最適化を実行し、バッファーは元のオブジェクトに直接追加され、新しいオブジェクトは生成されません
ここでは StringBuilder を例に挙げます。 StringBuilder の内部ストレージは char 配列を使用して保存されます。内部バッファーが不足している場合、システムは StringBuilder 内の char 配列にコピーします。 .arrayCopy は、非常に効率的な拡張メカニズムの実装に使用されます。これがバッファリングの実装方法です。
String d = "a" + "b" + "c"; は複数の文字列オブジェクトを生成します。上で回答したように、その理由は仮想マシン内に文字列バッファ プールがあるためです。
通常の「a」+「b」+「c」
「ab」文字列オブジェクトを生成します
ただし、これら 2 つのクラスを使用すると、最後の「abc」オブジェクトのみが生成されます
Java の文字列は固定長でメモリに保存されるため、文字列へのすべての追加、削除、変更には新しいメモリの作成とメモリのコピーが必要です。
StringBuffer と StringBuilder は、頻繁なメモリの適用を避けるために、通常の String の追加、削除、変更とは異なる方法で処理されます。
たとえば、「a」、「b」、「c」をそれぞれ接合します。 "a" + "b" + "c" を使用すると、(最適化なしで) Java は最初に 2 バイトのメモリを適用し、"a" と "b" をこのメモリにコピーし、次に 3 バイトのメモリを適用します。 「ab」と「c」をこのメモリにコピーします。 StringBuffer または StringBuilder を使用すると、最初に大きなメモリ (デフォルトは 16 バイト) が適用されます。結合するときは、「a」、「b」、および「c」をこのメモリに直接コピーするだけで済みます。繰り返しメモリを申請します。ここで先に申請してから使用するという形は、緩衝地帯の考え方を反映しています。
新しいオブジェクトは生成されません。 + が String で使用されるたびに、新しいオブジェクトが生成されます。もちろん、コンパイラーは短時間でコンパイルの最適化を実行し、バッファーは元のオブジェクトに直接追加され、新しいオブジェクトは生成されません
。ここでは StringBuilder を例に挙げます。 StringBuilder の内部ストレージは char 配列を使用して保存されます。内部バッファーが不足している場合、システムは StringBuilder 内の char 配列にコピーします。 .arrayCopy は、非常に効率的な拡張メカニズムの実装に使用されます。これがバッファリングの実装方法です。
String d = "a" + "b" + "c"; は複数の文字列オブジェクトを生成します。上で回答したように、その理由は仮想マシン内に文字列バッファ プールがあるためです。
通常の「a」+「b」+「c」
「ab」文字列オブジェクトを生成します
ただし、これら 2 つのクラスを使用すると、最後の「abc」オブジェクトのみが生成されます