A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迷你卡卡 中级黑马   /  2013-10-23 15:39  /  1583 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 迷你卡卡 于 2013-10-23 18:05 编辑

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

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

6 个回复

倒序浏览
主要是在做数据库语句的时候 做拼接。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
1、string的对象是不可以改变的,而stringbuilder对象可以动态的增加字符串长度,正如楼主所说的stringbuilder 的append方法
2、每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间,极占内存,而stringbuilder不会

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。如果对String类型的对象进行修改的时候,会创建新的对象,而用StringBuider就不会。如果只是要对一个字符串进行处理,用StringBuider会能提升性能。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
事实是,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"),性能会更好,但可读性就差点了。

评分

参与人数 1技术分 +2 收起 理由
haxyek + 2 姐们,到10分请到进行流程下一步,上传头像.

查看全部评分

回复 使用道具 举报
多谢给位解答,明白晒
回复 使用道具 举报
StringBuilder的Append方法是给字符串动态的增加,比string aa="bb"; string cc="dd";string ee=aa+cc;要快捷,但是效果其实一样。内部实现不太一样,StringBuilder更加好点。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马