字符串构建器据说是不可变的?这在C#.NET中意味着什么?

时间:2012-06-20 06:13:38

标签: stringbuilder

我最近被问到这个问题: String和StringBuilders有什么区别?

我知道我已经在某处读过StringBuilders 不可变,但是不可变的是什么以及StringBuilder上的操作如何比String更快,我不知道。

请任何人帮我理解这个吗?

2 个答案:

答案 0 :(得分:6)

不,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();

有关详细信息,请参阅我的article on string concatenation和我的other article on strings in general

通常,不可变数据类型是在创建后无法更改对象中的数据的类型,而可变数据类型允许您更改( > mutate ,因此名称)它。它并不像听起来那么简单 - 有关详细信息,请参阅Eric Lippert's blog post on kinds of immutability

答案 1 :(得分:1)

对于字符串: 每次对字符串执行操作以更改它时,都会导致新的实例。

如需进一步说明,请参阅以下链接:

Difference between string and StringBuilder in c#