String和StringBuffer字符拼接时哪个效率高

Eaglemm 2018-03-29 02:09:24
1 String str="abc"+"de";
2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
3 System.out.println(str);
4 System.out.println(stringBuilder.toString());
String的速度却比StringBuilder的反应速度要快么?
有的人说是快,有的人说一样快,到底时怎么样的呢?
...全文
2300 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
luochangxian 2018-06-21
  • 打赏
  • 举报
回复
String是个final类,不可变,
StringBuffer是可变长度的字符串
StringBuffer效率高
anakin_feng 2018-06-17
  • 打赏
  • 举报
回复
直接跑下代码,StringBuilder快很多
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
+操作符编译期间被翻译成StringBuilder的append方式,所以两个是一样的。 参考 https://www.quora.com/How-do-I-add-two-strings-in-Java-using-the-+-operator-for-runtime-input
Jinx_Q 2018-06-14
  • 打赏
  • 举报
回复
引用 19 楼 miaoch 的回复:
[quote=引用 16 楼 wow4464 的回复:] 确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接 所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为 StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢[/quote] 今天看了下书,在编译期确实从1.5开始进行优化,编译过程使用StringBuilder,我一定是被infoq上的一篇文章蒙骗了,书上还说虽然拼接在编译过程使用StringBuilder但是它是在循环内创建所以 还是推荐StringBuilder 又有一篇文章提出了大体量下+和StringBuilder的性能 https://www.cnblogs.com/edhn/p/3289879.html 所以目前 大方向推荐使用StringBuilder,最终都是编译好的才发布,垃圾会回收,写代码想咋写咋写。
tp 2018-06-08
  • 打赏
  • 举报
回复
理论上来说StringBuffer或者StringBulder最优,毕竟从头到尾都只有一个实例。String连接的话,每次连接就要new一个String对象,次数多了或病发率高的话,会导致频繁的GC。所以建议用StringBuffer或者StringBulder。 当然如果你用户就那么几个,效率要求不高的话String也行。
非专业IT男 2018-06-08
  • 打赏
  • 举报
回复
本来亲测。多次拼接建议用StringBuffer或者StringBulder。因为String的值是不可变,每次拼接都相当于重新new了一个,当拼接次数多了就会影响性能,严重时甚至会宕机。
聪头 2018-06-08
  • 打赏
  • 举报
回复
应该是StringBuffer
miaoch 2018-06-07
  • 打赏
  • 举报
回复
引用 23 楼 hemowolf 的回复:
[quote=引用 19 楼 miaoch 的回复:] [quote=引用 16 楼 wow4464 的回复:] 确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接 所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为 StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢[/quote] Java 编程思想至少在02年就有出版了 ![/quote] 恩 但是我只看过第三版,这里没说明
miaoch 2018-06-07
  • 打赏
  • 举报
回复
引用 21 楼 wow4464 的回复:
[quote=引用 19 楼 miaoch 的回复:] [quote=引用 16 楼 wow4464 的回复:] 确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接 所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为 StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢[/quote] 我说的是对加号操作的内置优化,你怎么扯到stringBuilder自身了[/quote] 看最后一句,07年出的书上面已经说明了这个优化。而那时候还没有1.8
双鱼座girl 2018-06-06
  • 打赏
  • 举报
回复
StringBuilder是效率更高
小灰狼 2018-06-06
  • 打赏
  • 举报
回复
引用 19 楼 miaoch 的回复:
[quote=引用 16 楼 wow4464 的回复:] 确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接 所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为 StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢[/quote] Java 编程思想至少在02年就有出版了 !
小灰狼 2018-06-06
  • 打赏
  • 举报
回复
引用 10 楼 u011619071 的回复:
看看自己的ide开发工具,现在很多java 类,方法体中String 拼接 class编译后都被改成StringBuilder的方式。
这跟IDE没半毛钱关系,JDK支持就支持,不支持就不支持! IDE编译也是调用JDK的编译器而已!
Jinx_Q 2018-06-06
  • 打赏
  • 举报
回复
引用 19 楼 miaoch 的回复:
[quote=引用 16 楼 wow4464 的回复:] 确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接 所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为 StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢[/quote] 我说的是对加号操作的内置优化,你怎么扯到stringBuilder自身了
iiiiiiiii_z 2018-05-30
  • 打赏
  • 举报
回复
少了用加号,多了用stringbuffer,实际工作中统计报表stringbuffer拼接sql语句。
miaoch 2018-05-24
  • 打赏
  • 举报
回复
引用 16 楼 wow4464 的回复:
确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接 所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为 StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
StringBuilder 是1.5引入的,为何要到1.8才实现优化?java编程思想是07年出版的,上面的第十三章就说明了这个优化,当时可还没有1.8呢
verejava 2018-05-23
  • 打赏
  • 举报
回复
StringBuffer 效率高
newzhong1 2018-05-23
  • 打赏
  • 举报
回复
首先,由于String每次修改都要生成一个新的的对象,所以经常修改的推荐另外的两个,当然StringBuffer比较合适,但是并不是所有的String操作都比较慢,有些特殊情况,他的拼接会被JVM解析为StringBuilder对象拼接,就像 String str="abc"+"de"; StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
Jinx_Q 2018-04-13
  • 打赏
  • 举报
回复
确实是在JDK1.8版本 String字符串拼接 "a"+"b"+"c" 等同于 StringBuilder的拼接 所以在不考虑线程安全情况下,JDK1.8中StringBuffer和Sting的字符串相加效率是一样的,只在JDK1.8之前你可以认为 StringBuilder或者StringBuffer 在一定数量级上字符串拼接消耗的内存更小,具体点是减少了栈中引用占用的空间,单单从效率上讲它们与String的相加拼法差距不大。为什么不太推荐使用String相加,绝大数情况是为了减少内存开支。
SimonDW 2018-04-11
  • 打赏
  • 举报
回复
java 编译器升级很多次了,对于 String的拼接的表达式有优化。 而StringBuilder比较适合未知次数的循环中字符串拼接。 StringBuilder中的内存空间会随调用调整,如果经常调整的话,性能也不会很好, 因此如果一开始设定一个较大空间数,也可以提升性能。
岂是蓬蒿人 2018-04-10
  • 打赏
  • 举报
回复
但是string拼接是消耗内存,但效率应该一样的。当然了,内存不够用的话还是stringbuffer效率高。
加载更多回复(11)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧