4

単純に文字列を追加するのではなく、なぜStringBuilderを使用するのでしょうか? たとえば、次のように実装する理由:

StringBuilder sb = new StringBuilder;
sb.Append("A string");
sb.Append("Another string");

以上

String first = "A string";
first += "Another string";

?

4

4 に答える 4

10

StringBuilderのドキュメントでは、その目的について説明しています。

String オブジェクトは不変です。System.String クラスのいずれかのメソッドを使用するたびに、メモリ内に新しい文字列オブジェクトを作成します。これには、その新しいオブジェクト用に新しい領域を割り当てる必要があります。文字列に繰り返し変更を加える必要がある状況では、新しい String オブジェクトの作成に関連するオーバーヘッドが高くつく可能性があります。System.Text.StringBuilder クラスは、新しいオブジェクトを作成せずに文字列を変更する場合に使用できます。たとえば、StringBuilder クラスを使用すると、ループ内で多数の文字列を連結するときにパフォーマンスを向上させることができます。

于 2011-03-31T11:11:42.117 に答える
5

あなたのような単純なケースでは、それは本当に問題ではありません。ただし、通常、文字列は不変です。つまり、文字列変数が変更されるたびに、メモリ内に新しいバッファーが作成され、新しいデータがコピーされ、古いバッファーが破棄されます。多くの文字列操作を行っている場合、これによりプログラムの速度が低下し、ガベージ コレクターによって収集する必要がある多くの放棄された文字列バッファーが発生します。

于 2011-03-31T11:11:29.347 に答える
0

基本的に文字列の不変性の問題。また、文字列をより簡単に操作するためのメソッドも提供します。Stringbuilderクラスの使用をご覧ください

于 2011-03-31T11:11:45.070 に答える
0

StringBuilderは変更可能です。文字列はそうではありません。したがって、文字列に対する操作はすべて、新しいオブジェクトを作成します。2番目のサンプルでは、​​2つのオブジェクトが作成されます(各行に1つ)。一方、最初のオブジェクトは1つだけ作成されます。

于 2011-03-31T11:12:52.630 に答える