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

2017-03-11 15:10:10 +08:00
 liqingcan

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

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

3459 次点击
所在节点    问与答
6 条回复
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
2017-03-11 16:43:27 +08:00
因为正常的 toString 很少超过 10 的吧,你试下 10 个以内两个的时间差。。
SoloCompany
2017-03-11 16:49:41 +08:00
你看的是历史书,估计是 java 1.0 年代时候的事情
xialdj
2017-03-11 16:57:43 +08:00
都已经不推荐用 stringbuffer 了 你这个书已经老了
CYKun
2017-03-11 17:32:20 +08:00
一个很简单的规则是,在循环里面的用 StringBuilder ,不在循环里面的就用加号。 Java8 之后还可以用 joining 收集器。
napsterwu
2017-03-11 18:24:19 +08:00
首先 要用 StringBuilder
第二 对于循环内的+号操作, jvm 会编译成每个循环 new 一个 StringBuilder ,然后 append ,然后把原来的 string 对象用这个临时变量的 toString 代替,个人感觉优化效果不大
所以 如果循环多 要在循环外面 new 一个 StringBuilder 然后在循环里面 append

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/346673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX