最近有人问我这个问题:String 和 StringBuilders 有什么区别?
我知道我在某处读到过 StringBuilders 是不可变的,但什么是不可变的,以及 StringBuilder 上的操作如何比 String 更快,这是我不知道的。
请任何人都可以帮助我理解这一点吗?
最近有人问我这个问题:String 和 StringBuilders 有什么区别?
我知道我在某处读到过 StringBuilders 是不可变的,但什么是不可变的,以及 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 关于各种不变性的博客文章以获取更多信息。