String和StringBuilder的区别与用法

String:表示不可变字符串;每当在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间,而且在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源。

StringBuilder:表示可变字符串;不用生成中间对象,拼接字符串比较多,或字符串的长度比较长时有较高的效率。StringBuilder的内存空间不够也要扩容而且翻倍,在分配空间时,不要过大,过大就会浪费浪费资源。 所以,初始化StringBuilder的时候最好根据需要设置容量,避免浪费

String和StringBuilder使用时对占用的内存情况:

如:

1.string a="aa"+"bb";

2.stringbuilder sb=new stringbuilder();

sb.append("aa"); sb.append("bb");

区别在于:

1. string s = "";

for (int i=0;i<1000;i++)   

s+=i.ToString();

2. StringBuilder sb = new StringBuilder(3000);//预先分配3000个字符,避免出现容量不足,新建string实例

for (int i=0;i<1000;i++)   

sb.Append(i.ToString());

第一种一共出现了: ""(由s = ""产生的程序集共享的string实例) "0","1"..."999"(1000个由i.ToString产生) "0","01"..."01...998999"(1000个由+=产生) 总共2001个字符串实例

第二种一共出现了: "0","1"..."999"(1000个由i.ToString产生) 一个stringbuilder引用的字符串,总共1001个字符串实例

StringBuilder的方法与使用

1.StringBuilder.Append 将信息追加到当前 StringBuilder 的结尾。

如:

StringBuilder Sb = new StringBuilder("ABC!");

Sb.Append(" DEF");

Console.WriteLine(Sb); 结果是:ABCDEF

2.StringBuilder.AppendFormat 用带格式文本替换字符串中传递的格式说明符,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串并且追加到结尾

如:格式化货币值格式类型

int MyInt = 25;

StringBuilder SB = new StringBuilder("Your total is ");

SB.AppendFormat("{0:C} ", MyInt);

Console.WriteLine(SB);结果是:Your total is $25.00

3.StringBuilder.Insert 将字符串或对象插入到当前 StringBuilder 对象的指定索引处,索引从0开始

如:

StringBuilder SB = new StringBuilder("ABCDEF");

SB.Insert(2,"HHH ");

Console.WriteLine(SB);结果是:ABHHHCDEF

4.StringBuilder.Remove 从当前 StringBuilder 对象中移除指定数量的字符,索引从0开始  

如: StringBuilder SB = new StringBuilder("ABCDEF");

SB.Remove(2,4); Console.WriteLine(SB);结果是:AB

5.StringBuilder.Replace 替换指定索引处的指定字符。

如: StringBuilder SB = new StringBuilder("ABCDEF");

SB.Replace(A,H);

Console.WriteLine(SB);结果是:HBCDEF

原文地址:https://www.cnblogs.com/lxjie/p/3100890.html