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

本文深入探讨了在.NET环境中,StringBuilder、StringBuffer与String在运行速度、数据类型及线程安全性上的区别。通过实验对比,揭示了StringBuilder在大量字符串操作中的性能优势,以及它与StringBuffer在线程安全方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
        }
    }

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
    }

 

 上述两个例子只是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。

    

 

转载于:https://www.cnblogs.com/yimo-along/p/9683569.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值