c#中的string和StringBuilder的区别

    技术2025-04-05  20

    string和StringBuilder的区别

    解析c#中的string和StringBuilder的区别,只有非常了解后我们才能更好的编程和灵活使用。

    区别

    1、类 String 表示字符串, 比如“ abc ”。 类 StringBuilder 表示可改变大小的字符序列( sequence of characters ),多个字符组成字符序列,字符序列和字符串是同一个意思。二者的区别在于, String 类型的字符串是常量,字符串创建出来后不允许修改。而 StringBuilder 类型的字符串是可修改的。

    2、string的缺点就是每次字符串变量的内容发生变化时,都必须重新分配内存。比如,如果创建一个迭代100000次的循环,每次迭代都将一个字符连接到字符串,这样内存 中就会有100000个字符串,每个字符串仅仅与前一个字符串相伴只是有一个字符不 同,性能影响是很大的。StringBuilder通过分配一个缓存,就是一个工作区来解决这些 问题,在工作区中队字符串应用StringBuilder类的相关方法。包括添加,删除,移除, 插入和替换字符等等。执行完之后,将调用ToString方法把工作区中的内容转换为一个 字符串,方便赋给一个字符串变量。这样StringBuilder会提升一些性能。

    3、企业项目中用的比较多,经常SQL连接。StringBuilder的对象是动态的,可以改变字符 串的内容。StringBuilder修改字符串内容的方法。 1)StringBuilder.Append ()。将内容追加到当前StringBuilder字符串的结尾。

    StringBuilder MySB = new StringBuilder("您好!"); MySB.Append("大家好!"); Console.WriteLine(MySB);

    2)StringBuilder.AppendFormat()。用一个带格式文本来代替字符串要传递的符号。

    int MyMoney = 24; StringBuilder MySB = new StringBuilder("欠我的钱是"); MySB.AppendFormat({0:C} MyMoney); Console.WriteLine(MySB);

    3)StringBuilder.lnsert(int,string)。将字符串和对象插入到当前StringBuilder字符串的 指定位置。

    4)StringBuilder.Remove(p,n)。在当前StringBuilder对象中移除指定的字符,就是说 从P位置开始删除n个字符。

    5)StringBuilder.Replace(a,b)。就是用b替换a指定字符串,a和b都是字符或字符串。

    string a = "aaa aaa aaa"; string b=a.Replace("a","w");

    结果输出"www www www"。

    上面这几种方法string也是用的,甚至比StringBuilderti要多一些。多出来的有如下:

    PadRight () /PadLeft ()方法,根据指定宽度,用相应的个数给定字符天才字符中,如果未指定填充字符,则使用空白符来填充。

    string a = "abcdefg"; a=a.PadRight(a.Length+3, "!");

    结果输出"abcdefg!!!"。

    Split(char*[])方法,char数组包含分隔符,可用将字符串分割为子串,这些子串将作为 一个字符串数组中的元素返回。

    SubstringO方法,从指定的位置N开始抽取指定的长度串,如果指定为1,就抽取长度 为1的子串。

    ToUpper〇/ToLower(),返回字符串的大小写形式的副本。

    Trim()/Trim(char[]),删除字符串中所有的空白符,如果提供的是一个char数组,则删除 这个char数组指定的前导和结尾字符。

    TrimEnd(char[])/TrimStart([]),删除char数字指定的所有前导和末尾的字符,如果数组 是null,则删除空白符。

    ToCharArray()/ToCharArray(n, 1),从字符串中抽取字符,并将它放入一个Unicode字 符数组中。

    4、每个 StringBuilder 类型的字符串都有一个空间,具备一定容量用来存放字符串。若是字符串的长度很长,空间已经无法存放得下字符串,那么,该空间的容量会自动变大。 在多线程环境下, StringBuilder 类型的字符串是线程不安全的。也就是说,多个线程共享同一个 StringBuilder 类型的字符串,会引发线程安全的问题。若是需要保证字符串是线程安全的,使用 StringBuffer 代替StringBuilder 。 创建StringBuilder 实例的时候,不能传递一个 null 对象作为实参,否则会抛出异常NullPointerException 。

    Processed: 0.013, SQL: 9