ホームページ  >  記事  >  Java  >  Java の String、StringBuffer、StringBuilder の違いの詳細な説明

Java の String、StringBuffer、StringBuilder の違いの詳細な説明

黄舟
黄舟オリジナル
2017-08-20 09:35:081563ブラウズ

この記事では主に Java の String、StringBuffer、StringBuilder の違いと、その使用方法に関する関連情報を紹介します。必要な方は、

String とその違いを参照してください。 StringBuffer と StringBuilder の間の関係とその使用方法

1. String クラス

String の値は不変であり、その結果 String に対する各操作で新しい String オブジェクトが生成されますが、これは非効率であるだけでなく、大量のメモリが限られたメモリ領域の無駄になります。

String a = "a"; // a はアドレス 0x0001 を指すと仮定します

a = "b";// 再割り当て後、a はアドレス 0x0002 を指しますが、「a」は 0x0001 アドレスに保存されますはまだ存在しますが、それはもはや a が指すものではなく、a はすでに別のアドレスを指しています。

したがって、文字列操作は、値を変更するのではなく、割り当てアドレスを変更することを意味します。

2. StringBuffer は可変クラス であり、それが指す文字列に対する操作は新しいオブジェクトを作成しません。 各 StringBuffer オブジェクトには一定のバッファ容量があり、文字列サイズがその容量を超えない場合、新しい容量は割り当てられません。


3. StringBuffer

StringBuffer クラスと StringBuilder クラスの機能は基本的に似ていますが、主な違いは、StringBuffer クラスのメソッドがマルチスレッドで安全であるのに対し、StringBuilder はスレッド セーフではないことです。それに比べて、StringBuilder クラスはわずかに高速になります。値が頻繁に変更される文字列の場合は、StringBuffer クラスと StringBuilder クラスを使用する必要があります。

1) まず、String、StringBuffer、StringBuilder はすべて JDK の最終クラスとして定義されているため、継承することはできません。

2) String は StringBuffer と比較してパフォーマンスが劣ります。これは String 型が変更されるたびに新しい String オブジェクトが再生成されるため、String の内容は頻繁に変更されるべきではありません。マルチスレッドを考慮しない場合は、StringBuilder を使用する必要があります。

3) StringBuffer がオブジェクトを生成した後、文字列の結合操作を実行するときは、新しいオブジェクトは生成されず、オブジェクト自体が操作されるだけであり、パフォーマンスは String よりも高くなります。また、StringBuffer はスレッドセーフなので、マルチスレッドでの使用に適しています。そのため、StringBuilder よりも速度が遅くなります。

4) StringBuilder の使用法は StringBuffer に似ていますが、スレッドセーフではないため、通常は単一スレッドで使用され、StringBuffer よりも効率的です。

要約すると、どちらを選択するかは、メモリのパフォーマンス、スレッドの安全性、実行効率などのさまざまな側面から考慮する必要があります。答えは上記の比較から得られます。

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

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