我最近被问到这个问题: String和StringBuilders有什么区别?
我知道我已经在某处读过StringBuilders 不可变,但是不可变的是什么以及StringBuilder上的操作如何比String更快,我不知道。
请任何人帮我理解这个吗?
答案 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)