2010-01-04 179 views
1

.NET中的字符串和字符串生成器有什么区别?字符串和字符串生成器

+0

可能的重复http://stackoverflow.com/questions/529999/when-to-use-stringbuilder – 2010-04-01 11:20:57

+0

可能重复的[字符串与StringBuilder](http://stackoverflow.com/questions/73883/string- vs-stringbuilder) – nawfal 2014-07-16 20:15:15

回答

5

字符串是不可变的类型。在执行像串联这样的字符串操作的批次时,它具有不良性能特征。

另一方面,Stringbuilders通过保持一个增长的缓冲区来克服这个弱点,以便每个级联不太可能需要分配一个新的字符串。

由于字符串构建器会添加一些开销,所以在进行一些重要的字符串工作时(例如在循环中),它们才真正需要。如果你的代码很快,不要担心。如果不是,请使用一个分析器来查看这个问题在你的案例中是否重要。

最后一点:这个答案实际上与ASP.NET毫无关系 - 对于.net和其他很多语言的字符串也是如此。

+1

我认为你的最后一段实际上比所有'真正'的答案都重要。 – ProfK 2010-01-04 05:36:36

1

字符串是immutable和stringbuilder是可变的。

在面向对象和功能 编程,一个不可变的对象是 对象,其状态被创建后不能被修改 。这是 与可变对象的对比,其中 可以在创建后进行修改。

不可变对象通常是有用的 因为 复制和一些比较昂贵的操作可以被省略,简化 程序代码和 加速执行。但是,如果对象包含大量可更改数据,则使对象不可变通常为 。 因此,许多语言都允许 用于不可变和可变的 对象。

每次对字符串对象进行连接时,会使用新的引用创建新的字符串对象,并将其分配给该对象。较旧的对象仍然会在内存中。