首页 新闻 会员 周边

String和StringBuilder有什么区别

0
悬赏园豆:10 [已解决问题] 解决于 2013-11-05 15:17

如题,在C#中的区别。效率上有什么区别,哪个更好用一点

rainstorm的主页 rainstorm | 初学一级 | 园豆:193
提问于:2013-11-04 22:59
< >
分享
最佳答案
3

String 对象是恒定不变的,而StringBuilder则是可变的

StringBuilder是.NET提供的动态创建String对象的高效方式,以克服String对象恒定性带来的性能 影响 。

如果只是单一的对一个string对象做少量几次的操作,则用string 对象

如果需要大量的字符拼接时,这时就一定要用StringBulder对象

因为String 对象的恒定性,创建一个字符后,其不会再改变,对于string的操作都会重新 生成一个新副本

而stringBuilder则是针对同一字符对象做处理,只会生成一个对象。

所以在不同情况下要用不同的对象

收获园豆:10
Zery | 大侠五级 |园豆:6151 | 2013-11-04 23:09
其他回答(4)
0

由于string的不可变性,在拼接的时候,会分配多个对象(内存空间),大量字符串拼接的时候,用StringBuilder进行进行拼接,因为StringBuilder只会new的时候分配一次内存空间,然后就是toString()时候,会分配一次,当然还有一次内存分配,一般用不到,就是StringBuilder默认内存空间不足的时候,StringBuilder默认分配的貌似为2m空间,如果几个字符串拼接,就用string,StringBuilder无法代替string,看场景来使用,各有所长

秋壶冰月 | 园豆:5903 (大侠五级) | 2013-11-04 23:13
0

StringBuilder效率会比较好

寒冷的冬天 | 园豆:102 (初学一级) | 2013-11-05 08:34
0

String是固定不变的,在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,
如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源

StringBuilder是可变的,不用生成中间对象,拼接字符串比较多,或字符串的长度比较长时有较高的效率。
StringBuilder的内存空间不够也要扩容,如果分配的空间远远大于需要量,也很浪费
所以,初始化StringBuilder的时候最好根据需要设置容量,避免浪费

li-peng | 园豆:954 (小虾三级) | 2013-11-05 09:14
0

String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String。

panjk | 园豆:712 (小虾三级) | 2013-11-05 09:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册