A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

string不是基本数据类型,它是一个对象,可以new出来,长度是不可变的;
stringbuilder在winfrom中用来处理字符串的变长处理并且是单线程的,正好符合了c/s
的单线程特点;
stringbuffer在开发b/s网站开发中用来处理字符串的变长问题,并且它是线程安全的,正好符合了b/s
的多线程的特点。
看了,不是很明白。谁能拿点代码表示一下?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

2 个回复

倒序浏览
关于stringBuilder和string详解 可以看这下这篇帖子
http://bbs.itcast.cn/thread-7970-1-1.html
回复 使用道具 举报
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);

        }


评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马