String和StringBulider的区别

今天分析petshop的时候,遇到StringBulider,对这个概念比较模糊,下面结合MSDN和自己对两者的理解说下

大家都知道String对象是不可变的,它有固定长度,每次使用它的时候,我们都要从内存中重新分配空间给他,如果我们重复修改它,那么内存开销是比较大的

比如
string x= "" ;
x = "a" + "b" + "c"  ;

最后x的值为"abc",其实这个x已经不是原来的那个x,内存已经为它重新分配了空间

如果我们要修改字符串而不创建新的对象,则可以使用 StringBuilder 。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

虽然 StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,不应将它与当前 StringBuilder 对象容纳的字符串长度混淆在一起。例如,可以创建 StringBuilder 类的带有字符串“Hello”(长度为 5)的一个新实例,同时可以指定该对象的最大容量为 25。当修改 StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量。下面的示例指定可以将 MyStringBuilder 对象扩充到最大 25 个空白。

比如:
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25); 

我们也可以通过 Capacity 属性来设置对象的最大长度

比如:
MyStringBuilder.Capacity = 25;

你可能感兴趣的:(String)