黑马程序员技术交流社区
标题:
C#中的string、stringbuilder、stringbuffer的区别
[打印本页]
作者:
10642491
时间:
2011-10-26 22:22
标题:
C#中的string、stringbuilder、stringbuffer的区别
string不是基本数据类型,它是一个对象,可以new出来,长度是不可变的;
stringbuilder在winfrom中用来处理字符串的变长处理并且是单线程的,正好符合了c/s
的单线程特点;
stringbuffer在开发b/s网站开发中用来处理字符串的变长问题,并且它是线程安全的,正好符合了b/s
的多线程的特点。
希望大家补充一下它们的异同点。
作者:
黄朝辉
时间:
2011-10-27 09:41
string长度谁说不可以变的呀
string a= "1";
a="234";
这不是变了么?
如果拼凑多的话 不管C/S B/S基本上都用StringBuilder,少的话就用string
作者:
杨恩锋
时间:
2011-10-27 11:11
string长度真的是不可变的,这个题目我之前有提过的,我们都知道string是引用类型来的,一开始str引用了内存中“1”的地址,执行 a="234" 的时候,其实是生成了一个新的变量,而不是就如楼上说的增加了长度。
作者:
10642491
时间:
2011-10-27 12:04
本帖最后由 10642491 于 2011-11-2 22:08 编辑
黄朝辉 发表于 2011-10-27 09:41
string长度谁说不可以变的呀
string a= "1";
a="234";
stirng a = "1";这句话的意思是声明一个string对象 a ,然后让a这个引用去指向字符串常量"1"的内存地址,
第二句话 a = "234" 的意思是让对象a 去指向另一个字符串常量 "234"的内存地址,所以a保存的内存地址早已变了,使用a的时候肯定调用的不是原先的对象。我们说的不可变指的是它指向的内存中的对象的值不能改变。
作者:
章坚
时间:
2011-11-1 20:52
主要的区别在于 stringbuilder相对于string,效率要高些,string会在每次改变的时候进行内存重新组合,而stringbuilder则不会从新组合,另外stringbuilder有append,insert,replace 等一些方法,用起来比较方便。
String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
作者:
夏雪锐
时间:
2011-11-1 23:42
黄朝辉 发表于 2011-10-27 09:41
string长度谁说不可以变的呀
string a= "1";
a="234";
String 用于表示字符串,并且该值是不可变的,看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象如果需要修改字符串对象的实际内容,请使用 StringBuilder 类。
StringBuilder 对象维护一个缓冲区,以便容纳新数据的串联。如果有足够的空间,新数据将被追加到缓冲区的末尾;
而StringBuilder和StringBuffer唯一的区别是Builder线程不安全,进而在性能上更快
------------------------------------------------------------------------------------------------------------------------------MSDN
作者:
10642491
时间:
2011-11-2 22:10
本帖最后由 10642491 于 2011-11-2 23:46 编辑
好像是用stringbuilder呵呵。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2