相同点:
这两个对象都是对字符串的操作,
不同点:
String 类每次被引用时,都会重新这个字符串分配空间,而原来分配的空间还会有,如果重复操作,就会占据大量的内存空间,进而浪费内存资源,如:
string str="一生";
str=str+"有你";
首先 定义了一个str变量,为"一生"这个字符串分配的物理内存空间,
然后 str的值现在是"一生有你",在内在中也同样分配了一个物理空间来存放"一生有你",但上次在内在中分配的内存空间"一生",还占据着内存空间。
StringBuilder 类 被实例引用时,都是对其原来的物理内存中的字符串进行操作的,不会再分配其它的物理空间,如果重复操作时,因为是对原来的
物理空间操作,所以也就不会造成资源浪费的迹象。如:
StringBuilder sb = new StringBuilder("一生");
sb.Append("有你");
Response.Write(sb);
string 和StringBuilder 的性能比较
string str = "";
StringBuilder sbstr= new StringBuilder();
int times = 1000;
int end=0, start=0;
//测试sting 所用的时间
for (int i = 0; i < times; i++)
{
str += i.ToString();
}
end = Environment.TickCount;
Console.WriteLine((end - start));
//测试stringbuilder 所用的时间
start = Environment.TickCount;
for (int k = 0; k < times; k++)
{
sbstr.Append(k.ToString());
}
end = Environment.TickCount;
Console.WriteLine(end - start);
Console.ReadKey();
运行结果:(所用的毫秒数)
str : 416670062
sbstr: 0
通过上面的分析,可以看出用String来做字符串的连接时效率非常低,但并不是所任何情况下都要用StringBuilder,当我们连接很少的字符串时可以用String,但当做大量的或频繁的字符串连接操作时,就一定要用StringBuilder。
学习中。。。。