不同点:
string对象是不可改变的,每次使用string类方法的时候,都会创建出一个新的字符串对象,这就意味着计算机需要为新对象的建立分配新的空间,这对系统的消耗是非常昂贵的。
如果说我们需要对一个字符串进行反复修改的时候,我们可以使用stringbuilder。
虽然 StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它的最大容量指定一个值。StringBuilder的默认初始容量是16,使用stringbuilder.Append()追加一个字符串的时候,当字符数大于最大容量值的时候,StringBuilder会自动申请一个更大的字符数组,在新的字符数组分配完成后,将原有字符数组中的字符复制到新字符数组中,,原字符数组被GC回收,因此设置合适的初始容量的非常必要的,尽量减少内存申请和对象创建。
相同点:
StringBuilder与string一样,有一个char[]字符数组,负责维护字符串内容。