关于 Java 的 toString 方法 StringBuffer 和直接用+号的一些想法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liqingcan
V2EX    问与答

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

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

    今天看博客有瞄到一句 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 收集器。
    orcusfox
        6
    orcusfox  
       2017-03-11 18:24:19 +08:00
    首先 要用 StringBuilder
    第二 对于循环内的+号操作, jvm 会编译成每个循环 new 一个 StringBuilder ,然后 append ,然后把原来的 string 对象用这个临时变量的 toString 代替个人感觉优化效果不大
    所以 如果循环多 要在循环外面 new 一个 StringBuilder 然后在循环里面 append
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5520 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 132ms UTC 06:35 PVG 14:35 LAX 22:35 JFK 01:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86