码迷,mamicode.com
首页 > 其他好文 > 详细

StringBuilder与String有哪些区别?

时间:2015-04-06 15:26:14      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

   System.String具备不可修改性,在程序中这样的特性容易产生性能上的问题。针对这个问题.NET提供的StringBuilder类可以解决类似的问题。

   String 和 StringBuilder 对象都可以很方便地处理字符串,它们具备各自的特点,下面将分别进行说明:

   System.String具有以下5个特点:

  1. String是引用类型,在堆上分配内存。
  2. String对象一旦生成,就不可改变(Immutable)。
  3. String提供了大量便捷的字符串操作函数。
  4. String运算时会产生一个新的实例。
  5. 在程序中定义相等运算符(== 和 !=),可以方便比较 String 对象的值(而不是引用)。

   StringBuilder具有以下两个特点:

  1. StringBuilder对象是动态对象,允许扩充它所封装的字符串中的字符数量。
  2. StringBuilder可以用于修改StringBuilder中的内容。

    由于String对象一旦生成,就不可改变,所以每次使用System.String类中的方法时,都需要在内存中创建一个新的字符串对象,这会分配新的空间给该新的对象。如果对字符串执行重复修改,创建一个新的String对象导致的系统开销可能会非常昂贵。如果不创建新的对象,只是修改字符串,则可以使用StringBuilder类。StringBuilder类型可以很好地解决字符串操作的性能问题,在它生成String对象之前,将不会产生任何String对象。一下示例代码对使用StringBuilder和使用String的性能差异做了比较,代码如下:

using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string ID = "ID number";
            int number = 20000;
            //使用StringBuilder,并记录使用的时间
            long sbStart = DateTime.Now.Ticks;
            UseStringBuilder(ID, number);
            long sbEnd = DateTime.Now.Ticks;
            //不实用StringBuilder,并记录使用的时间
            long sStrat = DateTime.Now.Ticks;
            UseString(ID, number);
            long sEnd = DateTime.Now.Ticks;
            //输出拼接字符串所花的时间
            Console.WriteLine("使用StringBuilder:" + (sbEnd - sbStart).ToString());
            Console.WriteLine("使用String:"+(sEnd-sStrat).ToString());
            Console.ReadLine();
            Console.Read();
        }

        //使用StringBuilder拼接字符串
        static String UseStringBuilder(string ID, int number)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < number; i++)//循环增加字符
            {
                sb.Append(ID + i.ToString());
            }
            sb.Remove(sb.Length - 1, 1);
            return sb.ToString();
        }

        //使用string拼接字符串
        static String UseString(string ID, int number)
        {
            string temp = "";
            for (int i = 0; i < number; i++)
            {
                temp += ID + i.ToString();
            }
            return temp;
        }
    }
}
实例程序使用String和StringBuilder的运行结果如下:

 使用StringBuilder:87891

 使用String:23408203

StringBuilder与System.String 相比,他会保留自己的缓冲区。在针对StringBuilder执行字符串操作时,会首先检查缓冲区的大小,看其是否能否容纳新的字符串。如果发现不够,则会增加需要的内存数量,因此可以做到大幅降低内存配置的操作次数,并可以有效提高性能。

   在相同字符串的许多操作上,使用StringBuilder类会比使用String对象更有效率。对于少量的字符串拼接的字符操作,使用String类比较方便。.NET对String对象扩展了许多便捷的字符串处理方法。

 

StringBuilder与String有哪些区别?

标签:

原文地址:http://www.cnblogs.com/YDSLM/p/4395911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!