字符串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(); } }
作者:樊勇
出处:http://www.cnblogs.com/fanyong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
我的联系方式:fanyong@gmail.com
个人独立博客:www.fy98.com