A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 天道酬勤_||淡腾 于 2014-5-9 12:15 编辑

System.String 和System.StringBuilder有什么区别?

7 个回复

倒序浏览
String对象初始化后值不可改变,StringBuilder对象初始化后能够改变。
打个比方
  1.             string a = "a";
  2.             a += "a";
  3.             StringBuilder b = new StringBuilder("a", 2);
  4.             b.Append("a");
  5.             Console.WriteLine("a={0},b={1}", a, b);
  6.             Console.ReadKey();
复制代码

他们两个输出的内容是一样的,但是过程却不一样,a先在内存中开辟了一个内存空间,大小为1,内容为"a"然后连接字符串"a"开辟一个新的内存空间,大小为2,内容为“aa”,然后把地址保存在a。b也开辟了一个内存空间大小为2,内容"a",然后在原空间加上"a",b只开辟了一个内存空间。
回复 使用道具 举报 1 0
。这样吧,你每次为同一个字符串重新赋值的时候,都会创建一个新的字符串对象,要拿新的空间给它。比如
String str ="nihao";  //1
str+="a";               //2
你执行1的时候 内存里面是 nihao   ,执行2的时候 内存里面有三块 nihao  和  a  和 nihaoa  。
而你用StringBuilder 就是在第一块儿里面直接加,它是允许扩充的。
回复 使用道具 举报
在字符串大量修改的情况下,StringBuilder比String更有优势。
说的不对的地方还请指正
回复 使用道具 举报
本帖最后由 亚伦 于 2014-5-8 21:44 编辑

System.Text.StringBuilder 和 System.String 很相似,在string能用的方法StringBuilder也能用。
System.Text.StringBuilder 的独特之处在于,当我们调用这个类型的函数成员时,都是直接修改对象内部的字符数据(因此更高效),而不是像string那样获得修改后格式的字符串副本。
另外string支持深复制,而StringBuilder支持的是浅复制(复制引用)。
  1.            // 例一
复制代码
  1.           // 例二
复制代码


回复 使用道具 举报
  1. //例一
  2.             //StringBuilder sb = new StringBuilder("**");
  3.             //string s = "**";

  4.             //sb.Replace("*", "$");
  5.             //s = s.Replace("*", "$");

  6.             //Console.WriteLine(sb);
  7.             //Console.WriteLine(s);

  8.             // 例二
  9.             StringBuilder sb = new StringBuilder("**");
  10.             StringBuilder sb2 = sb; // 仅复制引用

  11.             Console.WriteLine(sb);
  12.             Console.WriteLine(sb2);
  13.             Console.WriteLine();

  14.             // 修改sb
  15.             sb.Replace("*", "$");

  16.             // sb2也改变了
  17.             Console.WriteLine(sb);
  18.             Console.WriteLine(sb2);
复制代码
代码怎么修改不了,论坛出问题了?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
第次字符串改变时string会重新获得内存空间,而StringBuilder不需要每次都去分配内存空间。 当我们需要多次的对一个字符串进行多次操作的时候,用StringBuilder会节省内存开销,
回复 使用道具 举报
当有人给你回复后,请把帖子编辑为提问结束,这样版主才给你加分。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马