黑马程序员技术交流社区

标题: 字符串 [打印本页]

作者: 迷你卡卡    时间: 2013-10-23 15:39
标题: 字符串
本帖最后由 迷你卡卡 于 2013-10-23 18:05 编辑

StringBuilder,有时候经常看比人的代码看到StringBuilder的Append方法,这个StringBuilder和string有什么不同吗?什么时候用呢?用的时候有什么需要主意的吗?

作者: 茹化肖    时间: 2013-10-23 15:56
主要是在做数据库语句的时候 做拼接。
作者: 面朝大海,春暖    时间: 2013-10-23 15:58
1、string的对象是不可以改变的,而stringbuilder对象可以动态的增加字符串长度,正如楼主所说的stringbuilder 的append方法
2、每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间,极占内存,而stringbuilder不会
作者: 张凡    时间: 2013-10-23 16:05
如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。如果对String类型的对象进行修改的时候,会创建新的对象,而用StringBuider就不会。如果只是要对一个字符串进行处理,用StringBuider会能提升性能。
作者: 姐的霸气谁懂    时间: 2013-10-23 17:09
事实是,StringBuilder比string快的原因是string拼接时产生了中间对象,最终是垃圾。
如:
string str = "a";
str += "b";
str += "c";
那么,最终结果是"abc",但第二行产生了"ab"只是一个中间对象,是个垃圾。用StringBuilder会避免这种中间对象的产生。

那如果我这么写呢?
string str = "a"
    + "b"
    + "c";

这会比StringBuilder慢吗?绝对不会!
且不说这种常量的字符串拼接会在编译时就进行处理,就算"b"和"c"这里不是常量是变量,那么编译结果也是string.concat(...),不会产生中间对象。

当然,这样把多个语句变成了一个语句,有个缺点就是调试的时候没那么方便。

不是所有时候都可以方便的转换成连加,比如遇到if、while等语句块时。

用StringBuilder的目的是为了不产生中间变量,但如果这么用:
stringbuilder.Append("a"+str1+"b"),就还是产生了中间变量:"a"+str1+"b",应该改成
stringbuilder.Append("a").Append(str1).Append("b"),性能会更好,但可读性就差点了。
作者: 迷你卡卡    时间: 2013-10-23 18:04
多谢给位解答,明白晒
作者: aihuahuaxx    时间: 2013-10-23 18:10
StringBuilder的Append方法是给字符串动态的增加,比string aa="bb"; string cc="dd";string ee=aa+cc;要快捷,但是效果其实一样。内部实现不太一样,StringBuilder更加好点。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2