欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

18-09-20,String 与 StringBuilder (StringBuffer)

程序员文章站 2022-12-25 18:30:29
1.其一 在运行速度方面:StringBuilder > StringBuffer > String 上实例 上述两个例子只是for循环 从0 到99 博主笔记本有点卡 当数据庞大时优势就展示出了 铁证如山 ,就是有图有真相的那种 那么, 为什么会出现这种运行速度的差别,引出其二区别 2.其二 数据 ......

1.其一

    运行速度方面:stringbuilder > stringbuffer > string

上实例

class program
    {
        static void main(string[] args)
        {
            theteststring();
        }
        /// <summary>
        /// string
        /// </summary>
        public static void theteststring()
        {
            string str = null;
            //创建计时器   头一回见  引这个 system.diagnostics 命名空间
            stopwatch stopwatch = new stopwatch();
            //计时器 start
            stopwatch.start();
            for (int i = 0; i < 100; i++)
            {
                str += i;
            }
            //计时器 end
            stopwatch.stop();
            //输出str
            console.writeline(str);
            //输出程序运行时间
            console.writeline(stopwatch.elapsed);
            //控制台程序闪退的坑
            console.readkey();
        }
    }

18-09-20,String 与 StringBuilder (StringBuffer)

class program
    {
        static void main(string[] args)
        {
            //theteststring();
            stringbuilder();
        }
        #region stringbuilder
        public static void stringbuilder()
        {
            stringbuilder stringbuilder = new stringbuilder();

            stopwatch stopwatch = new stopwatch();
            //计时器 start
            stopwatch.start();
            for (int i = 0; i < 100; i++)
            {
                stringbuilder.append(i);
            }
            //计时器 end
            stopwatch.stop();
            //输出str
            console.writeline(stringbuilder);
            //输出程序运行时间
            console.writeline(stopwatch.elapsed);
            //控制台程序闪退的坑
            console.readkey();
        }
        #endregion
    }

18-09-20,String 与 StringBuilder (StringBuffer)

 

 上述两个例子只是for循环 从0 到99  博主笔记本有点卡  当数据庞大时优势就展示出了   铁证如山 ,就是有图有真相的那种 那么,

为什么会出现这种运行速度的差别,引出其二区别

 

2.其二

  数据类型

    string :乃字符串常量  引用数据类型,一旦创建即不可更改,stringbuilder:stringbuilder是一个可变的字符序列(百度百科)

    又如

1     string str="张"; 
2     console.writeline(str);
3        str+="三";
4        console.writeline(str);        

貌似从张变成了张三   但却为两个对象,变量名称相同但是  指向的堆中数据不同 一个指向 “张“,另一个指向 “张三“”

而反观stringbuilder以char为单位向字符串分配空间,所以操作中不需要进行额外的内存分配

 

3.其三

  在线程安全上,stringbuilder是线程不安全的,而stringbuffer是线程安全的

  如果一个stringbuffer对象在字符串缓冲区被多个线程使用时,stringbuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,

  但stringbuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用stringbuffer,但是在单线

       程的情况下,还是建议使用速度比较快的stringbuilder。(csdn)

 

ps:看一哈vs里面的监视器,今天over。