• string和StringBuilder的选择


    很多地方都讲,在做字符串拼接的时候StringBuilder比string快,并且快得多。

    事实是,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"),性能会更好,但可读性就差点了。

    我的结论:可以转换成一句string连加的StringBuilder操作,用连加更好。但尽量减少+=。

    转载需注明出处:http://cnblogs.com/zhucai/

    我的微博:http://weibo.com/zhucai

  • 相关阅读:
    MySQL高级查询总结
    MySQL数据库作业
    MySQLdump备份还原命令
    MySQL之Join
    MySQL课堂作业(一)
    Mysql数据库
    Js实例之简易计算器
    JS系统函数
    js课堂作业之转换月份
    C++ Name Mangling 为什么不编码返回值参数
  • 原文地址:https://www.cnblogs.com/zhucai/p/string_stringbuilder.html
Copyright © 2020-2023  润新知