0

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

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

请任何人都可以帮助我理解这一点吗?

4

2 回答 2

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

有关更多详细信息,请参阅我关于字符串连接的文章和我关于字符串的其他文章

通常,不可变数据类型是一种在创建后无法更改对象中的数据的数据类型,而可变数据类型允许您更改(mutate,因此得名)它。这并不像听起来那么简单 - 请参阅Eric Lippert 关于各种不变性的博客文章以获取更多信息。

于 2012-06-20T06:16:30.270 回答
1

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

更多解释请参考以下链接:

c#中string和StringBuilder的区别

于 2012-06-20T06:20:35.670 回答