string和StringBuilder

值类型是存储在内存中的栈,而引用类型的在栈中存储引用类型变量的地址,其本身存储在堆中。

在.NET中String是不可改变对象,一旦创建了一个String对象并给它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值

string创建后分配在栈区,大小不可修改,每次使用string类中的方法时,都要在内存中再创建一个新的字符串对象,然后指向新的对象。
这样就需要再分配新的空间。所以有可能产生很大的开销。

StringBuilder对象为动态字符串,可以对其设置好的字符数量进行扩展。另外,还可以设置一个最大长度,这个最大长度称为该StringBuilder对象的容量(Capacity)。

StringBuilder设置容量的意义在于,当修改StringBuilder字符串时,当其实际字符长度(即字符串已有的字符数量)未达到其容量之前,StringBuilder不会重新分配空间;当达到容量时,StringBuilder会在原空间的基础之上,自动不进行设置,StringBuilder默认初始分配16个字符长度。有两种方式来设置一个StringBuilder对象的容量。

原文地址:https://www.cnblogs.com/DSC1991/p/12022220.html