对CLR来说,string对象是个比较特殊的对象,它一旦被赋值就不可改变。运行时调用String类中的任何方法或进行任何运算(如”=”赋值、“+”拼接等),都会在内存中创建一个新的字符串对象,这也意味着要为该新对象分配新的内存空间。
StringBuilder并不会创建一个新的string对象,StringBuilder的默认长度是16,当长度大于16时,则重新分配内存,长度是16的倍数。StringBuilder重新分配内存时是按照上次容量加倍进行分配的。需要注意的是,如果指定的长度太小,需要频繁分配内存,太大了则浪费空间。
测试代码如下
private void stringContact()
{
string s = "ddd";
s += "eee";
s += "fff";
s += "ggg";
s += "hhh";
}
StringBuilder strb = new StringBuilder();
private void stringContact2()
{
strb.Clear();
strb.Append("ddd");
strb.Append("eee");
strb.Append("fff");
strb.Append("ggg");
strb.Append("hhh");
}
测试结果