黑马程序员技术交流社区
标题:
C#中的string、stringbuilder、stringbuffer的区别
[打印本页]
作者:
张少甫
时间:
2013-2-24 10:39
标题:
C#中的string、stringbuilder、stringbuffer的区别
string不是基本数据类型,它是一个对象,可以new出来,长度是不可变的;
stringbuilder在winfrom中用来处理字符串的变长处理并且是单线程的,正好符合了c/s
的单线程特点;
stringbuffer在开发b/s网站开发中用来处理字符串的变长问题,并且它是线程安全的,正好符合了b/s
的多线程的特点。
看了,不是很明白。谁能拿点代码表示一下?
作者:
刘明杰
时间:
2013-2-24 15:06
关于stringBuilder和string详解 可以看这下这篇帖子
http://bbs.itcast.cn/thread-7970-1-1.html
作者:
康晓璞
时间:
2013-2-24 23:44
1、System.String具有以下特点
String对象一旦生成,就不可改变,又因为String对象在运算时会产生一个新的实例,所以
在某些情况下,例如在循环中改变字符串的值,将会产生非常多的中间对象,这些中间对象将导致存储浪费和效率降低。
2、StringBuilding具有以下特点。
StringBuilding对象是一种可变字符串,可以在不创建新的对象的情况下改变字符串值,包括追加,修改,删除等操作。
因此效率较高
3.StringBuilding和String类对比,String值的每次追加操作都会分配新的内存,而StriingBuilder仅当StringBuilder的缓冲区太小以至于无法容纳新数据时才分配内存。因此,当字符串的追加操作不多时,最好还是用string类,但如果需要任意对此追加字符串,例如在一个循环中,使用StringBuilder类比使用String性能更高。尽管StringBuilder有诸多好处,但创建一个Stringbuilder实例比创建一个String实例需要花费更多的内存资源,因此使用StringBuilder也要讲场合。
下面是一些测试:
//测试string的不变性 string str = "aaaaa";
string strNew = str.Replace("a","b");
Console.WriteLine("str的值为:"+str);
Console.WriteLine("StrNew的值:"+strNew);
//测试stringbuilder的可变性
StringBuilder sb = new StringBuilder();
sb.Append("aaaaa");
StringBuilder sbNew = new StringBuilder();
sbNew= sb.Replace("a","b");
Console.WriteLine("sb的值"+sb.ToString());
Console.WriteLine("sbNew的值" + sbNew.ToString());
//测试string所用时间
TestString();
测试string拼接字符串所用时间
TestStringBuilder();
/// <summary>
/// 测试string拼接字符串所用时间
/// </summary>
void TestString()
{
string str = "";
DateTime dtBegin = DateTime.Now;
for (int i = 0; i < 10000;i++ )
{
str += DateTime.Now;
}
Console.WriteLine("str循环10000所用毫秒数:" + DateTime.Now.Subtract(dtBegin).TotalMilliseconds);
}
//测试StringBuilder拼接字符串所用时间
void TestStringBuilder()
{
StringBuilder sb = new StringBuilder();
DateTime dtBegin = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
sb.Append(DateTime.Now.ToString());
}
Console.WriteLine("sb循环10000所用毫秒数:" + DateTime.Now.Subtract(dtBegin).TotalMilliseconds);
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2