V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
liqingcan
V2EX  ›  问与答

关于 Java 的 toString 方法 StringBuffer 和直接用+号的一些想法

  •  
  •   liqingcan · 2017-03-11 15:10:10 +08:00 · 3479 次点击
    这是一个创建于 2844 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天看博客有瞄到一句 QQ 截图 20170311150320.png 就是说,在大量使用字符串连接的时候用+号浪费性能,推荐使用 StringBuffer 的方式。这个挺早之前就经常看到有这么说的。但是,今天突然有个想法,既然用+号会浪费性能,那么,我们经常用 eclipse 或者 idea 来重写一个 javabean 的 toString 方法时,为什么都是用的+号的形式? QQ 截图 20170311150123.png 既然编辑器有提供帮我们写的工能,为什么编辑器不选择一个更有效率的办法?

    我猜测是因为 toString 基本是在开发调试阶段使用,在正常业务逻辑中基本不会用到,所以也就不去在乎这一点了。

    6 条回复    2017-03-11 18:24:19 +08:00
    freelee
        1
    freelee  
       2017-03-11 15:37:25 +08:00
    idea 这么提示,是因为你所用版本的 jvm ,会在编译的时候把这种简单的+连接改成 stringbuilder 拼接吧
    http://stackoverflow.com/questions/1532461/stringbuilder-vs-string-concatenation-in-tostring-in-java
    ob
        2
    ob  
       2017-03-11 16:43:27 +08:00 via Android
    因为正常的 toString 很少超过 10 的吧,你试下 10 个以内两个的时间差。。
    SoloCompany
        3
    SoloCompany  
       2017-03-11 16:49:41 +08:00
    你看的是历史书,估计是 java 1.0 年代时候的事情
    xialdj
        4
    xialdj  
       2017-03-11 16:57:43 +08:00 via iPhone
    都已经不推荐用 stringbuffer 了 你这个书已经老了
    CYKun
        5
    CYKun  
       2017-03-11 17:32:20 +08:00 via Android
    一个很简单的规则是,在循环里面的用 StringBuilder ,不在循环里面的就用加号。 Java8 之后还可以用 joining 收集器。
    napsterwu
        6
    napsterwu  
       2017-03-11 18:24:19 +08:00
    首先 要用 StringBuilder
    第二 对于循环内的+号操作, jvm 会编译成每个循环 new 一个 StringBuilder ,然后 append ,然后把原来的 string 对象用这个临时变量的 toString 代替,个人感觉优化效果不大
    所以 如果循环多 要在循环外面 new 一个 StringBuilder 然后在循环里面 append
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1059 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 19:18 · PVG 03:18 · LAX 11:18 · JFK 14:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.