黑马程序员技术交流社区
标题:
System.String 和System.StringBuilder有什么区别?
[打印本页]
作者:
天道酬勤_||淡腾
时间:
2014-5-8 19:00
标题:
System.String 和System.StringBuilder有什么区别?
本帖最后由 天道酬勤_||淡腾 于 2014-5-9 12:15 编辑
System.String 和System.StringBuilder有什么区别?
作者:
林枫
时间:
2014-5-8 20:05
String对象初始化后值不可改变,StringBuilder对象初始化后能够改变。
打个比方
string a = "a";
a += "a";
StringBuilder b = new StringBuilder("a", 2);
b.Append("a");
Console.WriteLine("a={0},b={1}", a, b);
Console.ReadKey();
复制代码
他们两个输出的内容是一样的,但是过程却不一样,a先在内存中开辟了一个内存空间,大小为1,内容为"a"然后连接字符串"a"开辟一个新的内存空间,大小为2,内容为“aa”,然后把地址保存在a。b也开辟了一个内存空间大小为2,内容"a",然后在原空间加上"a",b只开辟了一个内存空间。
作者:
西瓜
时间:
2014-5-8 20:06
。这样吧,你每次为同一个字符串重新赋值的时候,都会创建一个新的字符串对象,要拿新的空间给它。比如
String str ="nihao"; //1
str+="a"; //2
你执行1的时候 内存里面是 nihao ,执行2的时候 内存里面有三块 nihao 和 a 和 nihaoa 。
而你用StringBuilder 就是在第一块儿里面直接加,它是允许扩充的。
作者:
林枫
时间:
2014-5-8 20:08
在字符串大量修改的情况下,StringBuilder比String更有优势。
说的不对的地方还请指正
作者:
亚伦
时间:
2014-5-8 21:33
本帖最后由 亚伦 于 2014-5-8 21:44 编辑
System.Text.StringBuilder 和 System.String 很相似,在string能用的方法StringBuilder也能用。
System.Text.StringBuilder 的独特之处在于,当我们调用这个类型的函数成员时,都是直接修改对象内部的字符数据(因此更高效),而不是像string那样获得修改后格式的字符串副本。
另外string支持深复制,而StringBuilder支持的是浅复制(复制引用)。
// 例一
复制代码
// 例二
复制代码
作者:
亚伦
时间:
2014-5-8 21:45
//例一
//StringBuilder sb = new StringBuilder("**");
//string s = "**";
//sb.Replace("*", "$");
//s = s.Replace("*", "$");
//Console.WriteLine(sb);
//Console.WriteLine(s);
// 例二
StringBuilder sb = new StringBuilder("**");
StringBuilder sb2 = sb; // 仅复制引用
Console.WriteLine(sb);
Console.WriteLine(sb2);
Console.WriteLine();
// 修改sb
sb.Replace("*", "$");
// sb2也改变了
Console.WriteLine(sb);
Console.WriteLine(sb2);
复制代码
代码怎么修改不了,论坛出问题了?
作者:
.net_交流
时间:
2014-5-9 00:25
第次字符串改变时string会重新获得内存空间,而StringBuilder不需要每次都去分配内存空间。 当我们需要多次的对一个字符串进行多次操作的时候,用StringBuilder会节省内存开销,
作者:
czwanglei
时间:
2014-5-9 08:40
当有人给你回复后,请把帖子编辑为提问结束,这样版主才给你加分。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2