string VS StringBuilder

2019/10/14

21

一个 string 的实例时不可变的,当它被创建后,你无法修改它的值,似乎更改 string 的任何操作都将返回一个新实例

string foo = "Foo";
// 返回一个新的实例,而不是修改旧的
string bar = foo.Replace('o', 'a');
string baz = foo + "bar"; // 同上

不可变对象有一些不错的属性,例如可以跨线程使用它们而不必单新同步问题,或者您可以直接分发私有后备字段,而不担心有人更改了不应更改的对象。但是,如果不小心错误使用它,可能会导致严重的性能问题。

当你需要可变字符串时,那么您将需要一个 StringBuilder,它是可以更改的字符缓冲区。如果您仍然使用 string 来达到可变字符串效果,这将会影响性能,因为 string 的实例时不可变的,将不必要地创建和销毁许多对象。

关于多个字符串拼接问题

string foo = "abc" + "def" + "efg" + "hij";

值得注意,对于字符串,C# 编译器相当聪明,对于上述代码,会被编译器 Join,在运行时仅保留一个字符串。

评论