string 和stringbuilder的使用?

gongxi1987 2012-02-18 04:59:44
String 或 StringBuilder 对象的串联操作的性能取决于内存分配的发生频率。String 串联操作每次都分配内存,而 StringBuilder 串联操作仅当 StringBuilder 对象缓冲区太小而无法容纳新数据时才分配内存。因此,如果串联固定数量的 String 对象,则 String 类更适合串联操作。这种情况下,编译器甚至会将各个串联操作组合到一个操作中。如果串联任意数量的字符串,则 StringBuilder 对象更适合串联操作;例如,某个循环对用户输入的任意数量的字符串进行串联。
msdn上看到的,没看懂,有人能解释一下不!
...全文
138 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xx_mm 的回复:]
这个是面试最常问的,这几天面试几十家经常被问到...呵呵

比如String拼接字符串和StringBuilder有什么区别?
String拼接字符串内部做了什么,怎么解决?
为什么NET有了String 还要加入StringBuilder?
String的特点是什么,对于多字符串拼接你会怎么做?
....
[/Quote]
这几天面试几十家、、、、、、、
gongxi1987 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 foreachif 的回复:]
使用String:
String strResult = str1 + str2 + str3 + str4 + str5;
--编译器优化

使用StringBuilder:
StringBulider strBuilder = new StringBuilder(str1);
...
strBuilder.Append(str2);
...
strBuilder.Append……
[/Quote]没搞明白串联指的是什么,估计就是你说的这个。其他的回答我也知道,多次拼接用stringbuilder,但是刚才那一段里说有时候用string挺好,只是好奇那是什么情况,结果就你看了内容,其他人都是看个标题而已
色拉油 2012-02-18
  • 打赏
  • 举报
回复
这样说够明白了[Quote=引用 5 楼 porschev 的回复:]

引用 4 楼 gongxi1987 的回复:

重点是什么时候使用string更好那个问题引用 2 楼 zh6335901 的回复:

StringBuilder内部维护这一个char数组,可以在构造函数中为char数组指定初始长度,不指定的话好像是32,在进行串联操作时长度超过指定长度时才会进行分配内存


这个问题也快成月经帖了。。。

如果字符串不用拼接多次。。。当然是用……
[/Quote]
zzzzv0 2012-02-18
  • 打赏
  • 举报
回复
能够计算出总长度的时候,用string编译器会直接分配一个这么大的空间
而如果用stringbuilder,需要自己手动计算总长度,不然stringbuilder在每次空间满的时候都需要重新分配(貌似是每次翻倍)
zzzzv0 2012-02-18
  • 打赏
  • 举报
回复
貌似是能用一次string.concat完成的用string,就是能在拼接前计算拼接的总大小。未知总大小的用stringbuilder
WAN 2012-02-18
  • 打赏
  • 举报
回复
使用String:
String strResult = str1 + str2 + str3 + str4 + str5;
--编译器优化

使用StringBuilder:
StringBulider strBuilder = new StringBuilder(str1);
...
strBuilder.Append(str2);
...
strBuilder.Append(str3);
...
strBuilder.Append(str4);
...
strBuilder.Append(str5);
蔡袅 2012-02-18
  • 打赏
  • 举报
回复
这个是面试最常问的,这几天面试几十家经常被问到...呵呵

比如String拼接字符串和StringBuilder有什么区别?
String拼接字符串内部做了什么,怎么解决?
为什么NET有了String 还要加入StringBuilder?
String的特点是什么,对于多字符串拼接你会怎么做?
....
porschev 2012-02-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gongxi1987 的回复:]

重点是什么时候使用string更好那个问题引用 2 楼 zh6335901 的回复:

StringBuilder内部维护这一个char数组,可以在构造函数中为char数组指定初始长度,不指定的话好像是32,在进行串联操作时长度超过指定长度时才会进行分配内存
[/Quote]

这个问题也快成月经帖了。。。

如果字符串不用拼接多次。。。当然是用string

如果字符串需要大量的拼接。。。那请使用stringbuilder

原因:String类型对象,一旦创建其值,再修改,新值会重新申请内存空间,存在新的内存空间中....

stringbuilder不需要重新申请新的内存空间.


可以自己实验一下,做个几万次的循环,string和stringbuilder两种各用的时间。。。。
gongxi1987 2012-02-18
  • 打赏
  • 举报
回复
重点是什么时候使用string更好那个问题[Quote=引用 2 楼 zh6335901 的回复:]

StringBuilder内部维护这一个char数组,可以在构造函数中为char数组指定初始长度,不指定的话好像是32,在进行串联操作时长度超过指定长度时才会进行分配内存
[/Quote]
gongxi1987 2012-02-18
  • 打赏
  • 举报
回复
主要是串联固定stirng什么意思,就是什么情况下优先选择string[Quote=引用 1 楼 bdmh 的回复:]

StringBuilder 会减少空间的频繁申请
[/Quote]
zh6335901 2012-02-18
  • 打赏
  • 举报
回复
StringBuilder内部维护这一个char数组,可以在构造函数中为char数组指定初始长度,不指定的话好像是32,在进行串联操作时长度超过指定长度时才会进行分配内存
bdmh 2012-02-18
  • 打赏
  • 举报
回复
StringBuilder 会减少空间的频繁申请

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧