StringBuilder 采用了构造器设计模式的思想高效地构造一个字符串对象,在构造过程中StringBuilder可以有效避免临时字符串对象的生成。
1:当需要操作很长的字符串,或者要对字符串进行非常频繁的操作时,应该使用StringBuilder,其余场合,用String比较方便。
2:之所以说平常情况用String比较方便是因为:
StringBuilder sb="hello world!"; 这样的语句是不行的,要用:
StringBuilder sb=new StringBuilder("hello world!"); 这样子才能初始化一个StringBuilder对象。
sb="change the content of StringBuilder"; 这样的语句也是不行的,不能直接把String转换成StringBuilder,显式转换也不成!
sb.Remove(0, sb.Length);
sb.Append("Test for string builder change!"); 这样子才能改变一个StringBuilder对象的内容。或者用sb.Replace();方法。
3:StringBuilder类还有一个这样的特性:它的Length属性是非ReadOnly的,
假如有: StringBuilder sb=new StringBuilder("12345");
执行: sb.Length=3;
再输出sb的内容,就只剩 123 了。如果这个Length设置大于原来的长度,那么后面补空格。
String 类型没有这个功能,它的Length是read only的!
“StringBuilder类内部保留了一个私有的String 类型成员,当ToString()这个方法被调用时,这个String 类型成员将会被赋值并且返回给调用者。在字符串组装期间,这个字符串会在内存上被直接修改。StringBuilderod 不仅仅提供了性能上更加优秀的字符串操作,它还能被用来和非托管代码进行交互。对于非托管的代码,字符串的操作是直接基于内存的,如果使用字符串类型和非托管的代码进行,那潜在的违反了字符串对象不可变的原则。所以StringBuilder类常常被用来和非托管代码进行交互。”