C#:string、stringBuffer、stringBuilder的区别

2021-02-18 02:16

阅读:504

好脑子不如烂笔头,总是记不住,记下来吧

依然 搬运 地址: http://blog.csdn.net/qq_28187979/article/details/76607253

-----------------------------------------------------------------------------------------------------------------------

最近对这几个傻傻分不清楚,在网上搜集了一些资料,现在总结一下。

string是基本类型,第一条语句,实际上是创建一个名为s1的string类型的对象,系统为s1分配足够的内存来保存s1中的数据。第二条语句,并不是在s1所指向的地址内添加字符串“ceshi”,而是创建一个新的字符串实例,给它分配足够的内存,并将“test”放入,将“ceshi”添加进去,然后更新存贮在s1变量中的内存地址,使s1指向新的字符串对象,旧字符串对象将被销毁。也就是说,每次对string类型的添加或删除操作,都会创建一个新的字符串对象,销毁旧的字符串对象。如果频繁的进行字符串操作,就会影响系统性能。这也是为什么说,string是不可改变对象。所以,如果需要频繁的修改字符串,建议使用stringBuffer或stringBuilder。

string s1 = "test";

s1 += "ceshi";

stringBuilder和string的初始化,string初始化时,系统会为其分配足够的内存来容纳其所定义的字符串文本,但是stringBuilder有许多构造函数来初始化当前实例的初始大小以及可存储的最大字符数,在使用时,最好将容量设置为字符串最大长度,确保stringBuilder不需要重新分配内存,如果字符的数量超过设置的最大容量,.net运行库将自动分配内存并翻倍。也就是说,stringBuilder可以显式的设置分配内存的大小,而string只能根据初始化字符串的大小由系统来分配足够的内存。
在上述情况中,stringBuffer和stringBuilder是一样的,后者速度比前者快,但是前者是线程安全的,适合在多线程下使用,后者是线程非安全的,比较适合在单线程下使用。

 


评论


亲,登录后才可以留言!