私は最近、次の質問を受けました: String と StringBuilders の違いは何ですか?
StringBuilders がimmutableであることをどこかで読んだことは知っていましたが、不変とは何か、StringBuilder の操作がどのようにして String よりも高速になるのか、私は知りませんでした。
誰でもこれを理解するのを手伝ってくれますか?
私は最近、次の質問を受けました: String と StringBuilders の違いは何ですか?
StringBuilders がimmutableであることをどこかで読んだことは知っていましたが、不変とは何か、StringBuilder の操作がどのようにして String よりも高速になるのか、私は知りませんでした。
誰でもこれを理解するのを手伝ってくれますか?
いいえ、String
不変です-一方、StringBuilder
可変です。それが要点です。これを使用して、通常は多くの追加操作から文字列を作成します。毎回すべてのデータの新しいコピーを作成せずにこれを行うことができますString
。
// Bad
string x = "";
for (int i = 0; i < 100; i++)
{
x += i;
}
// Good
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 100; i++)
{
builder.Append(i);
}
string x = builder.ToString();
詳細については、文字列連結に関する私の記事と、一般的な文字列に関する他の記事を参照してください。
一般に、不変データ型は作成後にオブジェクト内のデータを変更できないものですが、可変データ型は変更できます ( mutate、したがって名前)。ただし、見た目ほど単純ではありません。詳細については、Eric Lippert の不変性の種類に関するブログ投稿を参照してください。