黑马程序员技术交流社区
标题:
关于string和StringBuilder的区别?求高手解释
[打印本页]
作者:
蒋春
时间:
2012-5-29 20:38
标题:
关于string和StringBuilder的区别?求高手解释
string str1 = "aa";
str1 += "bb";
Console.WriteLine(str1);
StringBuilder str = new StringBuilder("aa");
str.Append("bb");
Console.WriteLine(str);
定义str1和str字符串,str1使用+=方式赋值,str使用Append方法赋值
然而最后结果是一样的,str的Append方法是在字符传后面追加,请问他们两个变量在内存中的地址和释放情况是?哪个更节用资源
作者:
聂玉林
时间:
2012-5-29 21:27
应该是后面那个更省资源
作者:
牛景亮
时间:
2012-5-29 22:16
String 对象是不可改变的,像你用的
string str1 = "aa";
str1 += "bb";
第一次分配固定空间,而如果追加"bb",就必须重新分配空间,将原来的"aa"copy出来和"bb"一起放到新空间中。
而如果是 StringBuilder 只需要扩大空间将"bb"加到后面就行了,不需要copy原来的了,所以性能比string好
作者:
蒋春
时间:
2012-5-30 08:03
那就是说string类型的字符串,同一个字符串被第二次赋值后,第一次的值和地址在内存中还存在?
作者:
liuzhengyong
时间:
2012-5-30 20:04
string对象,是从新分配堆地址,原先指向aa的引用,现在指向bb这个地址了。而stringbuilder直接在后面追加,性能还是stringbuilder好。
作者:
钟广雄
时间:
2012-6-7 22:24
string,是重新分配堆地址。而stringbuilder直接在后面追加,性能还是stringbuilder好。但个人建议虽然tringbuilder性能比较好,如果要是用到比较少的字符 还是用string比较好,如需要追 加大量的字符时,必然stringbuilder,要用到洽到好处,才知道哪个好,
作者:
钟山山
时间:
2012-6-8 08:29
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。
而stringbuilder直接在后面追加,性能还是stringbuilder好。
作者:
李朋霏
时间:
2012-7-16 23:16
string 的值是不会变的,在修改它时必须创建一个新的,这样占内存,产生大量临时中间字符;
stringBuilder则是创建好了,直接追加,只不过需要to.string()转化为字符串格式即可。
作者:
许楠
时间:
2012-7-17 17:29
String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String
另外,对于 String 我们不得不多说几句:
1.它是引用类型,在堆上分配内存
2.运算时会产生一个新的实例
3.String 对象一旦生成不可改变(Immutable)
3.定义相等运算符(== 和 !=)是为了比较 String 对象(而不是引用)的值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2