字符串String

字符串

1. string和String的区别

string是C#中的关键字,并且是引用类型,string类型是字符串类型,表示零个或更多Unicode字符组成的序列。string是.Net Framework中String的别名。String是类,表示文本,即一系列Unicode字符。string是C#的基元类型(Primitive),简单来说就是编译器直接支持的数据类型。基元类型要直接映射到Framework类库(FCL)中,例如,C#中的一个基元类型int直接映射到System.Int32类型,这里int是基元类型,System.Int32是FCL类型。而String是FCL(Framework Class Library)类型的,所以在C#编译时,会自动地把string转换为System.String。所以,string与String实质上是没什么区别的,只是在使用string时要做一次转换,转换为String。因此,在编码时推荐使用String。

         String对象是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。例如,当我们实例化一个String的对象后,在内存中为此对象分配一个空间。比如:“String str = ‘hello’;”,当我们修改str值的时候,如“str = ‘hello world’;”此时,系统会为变量str重新分配一个空间。这样原来的内存空间就被浪费掉了,只能等待垃圾回收器回收。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果是频繁这样做的话,建议使用StringBuilder对象。

2. StringBuilder

出于性能方面的考虑,大量的串联或涉及到其他字符串操作应通过StringBuilder类来执行。StringBuilder定义在System.Text命名空间中,它表示值为可变的字符序列的类似字符串的对象。之所以说值是可变的,是因为可以为StringBuilder对象进行追加、移除、替换或插入字符串来进行修改。这与String类型不同,String对象是不可改变的。每次使用System.String类中的方法之一(比如使用+运算符来连接字符串、用来插入字符串等)时,都要在内存中创建一个新的字符串对象,这就需要为该新的对象分配新的空间。在需要对字符串执行重复修改的情况下,系统开销会很昂贵。建议使用StringBuilder。

         StringBuilder允许我们有效地对字符串的字符执行动态操作,有效地缩减字符串的大小或者更改字符串中的字符。如果字符串变大,超过已经分配的字符串的大小,StringBuilder就会自动地分配一个全新的、更大的数组,并开始使用新的数组。虽然StringBuilder对象是动态对象,允许扩充它所封装的字符串中的字符数量,但是也可以为它可容纳的最大字符数指定一个值。次值称为该对象的容量,不应将它与当前StringBuilder对象容纳的字符串长度混淆在一起。例如,可以创建StringBuilder类的带有字符串“Hello”(长度为5)的一个新实例,同时可以指定该对象的最大容量为25,。当修改StringBuilder时,在达到容量之前,它不会为自己重新分配空间;当达到容量时,将自动分配新的空间且容量翻倍,可以使用重载的构造函数之一来指定StringBuilder类的容量。

实例:

 

class StringBuilderTest
{
    static void Main()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        // 创建一个0~9的字符串
        for(int i = 0; i < 10; i++)
        {
            sb.Append(i.ToString());
        }
        System.Console.WriteLine(sb);//输出0123456789
        //复制一个字符
        sb[0] = sb[9];
        System.Console.WriteLine(sb);//输出9123456789
        System.Consle.ReadKey();
    }
}

 

posted on 2012-12-15 12:13  Frank.Fan  阅读(758)  评论(0编辑  收藏  举报