黑马程序员技术交流社区

标题: StringBuffer和Stringbuilder的区别。 [打印本页]

作者: AtheerCHA    时间: 2015-1-9 20:00
标题: StringBuffer和Stringbuilder的区别。
这两个除了Stringbuilder线程不同步之外还有什么区别?
作者: Trista    时间: 2015-1-9 20:18
StringBuilder是StringBuffer的升级版,StringBuilder类提供一个与 StringBuffer 兼容的 API,用法主要是提高了效率,多线程StringBuilder要手动加锁


作者: 只会金克斯    时间: 2015-1-9 23:03
围观大神吧。。。。
作者: pupilguan    时间: 2015-1-10 00:49
最大亮点!!提高效率,如果是单线程,极力推荐Stringbuilder,当处理大数据的时候是相当明显的。
作者: 以利亚    时间: 2015-1-10 10:07
1、StringBuilder:一个可变的字符序列,该类被与StringBuffer一样动态添加字符串,可以用在字符串缓冲区被单个线程使用的时候。单线程实例中它比 StringBuffer 要快。一般情况下,我们用StringBuilder主要替换StringBuffer的append和insert方法。append 方法始终将这些字符添加到生成器的末端;而insert方法则在指定的点添加字符。(用于单线程) 2、StringBuffer:线程安全的可变字符序列。可以动态添加字符串,能进行修改。(一般用于多线程) JDK升级三个因素:提高效率、简化书写、提高安全性。
作者: 廖彬    时间: 2015-1-10 12:09
最大的不同就是一个同步一个不同,不过StringBuilder的效率更高, 如果没有用到线程同步尽量用StringBuilder
作者: Death、    时间: 2015-1-10 12:27
进来学习学习
作者: 邓士林    时间: 2015-1-10 12:32
以利亚 发表于 2015-1-10 10:07
1、StringBuilder:一个可变的字符序列,该类被与StringBuffer一样动态添加字符串,可以用在字符串缓冲区被 ...

这不是我在http://bbs.itheima.com/forum.php ... d=162795&extra=总回复的么?
作者: 以利亚    时间: 2015-1-10 13:33
邓士林 发表于 2015-1-10 12:32
这不是我在http://bbs.itheima.com/forum.php?mod=viewthread&tid=162795&extra=总回复的么?

是的,成我的了!
作者: 邓士林    时间: 2015-1-10 13:39
以利亚 发表于 2015-1-10 13:33
是的,成我的了!

共同学习,共同进步
作者: lpf870826    时间: 2015-1-10 13:43
我们从源代码的角度来看它们两个的区别。我们就从使用最多的
  1. append(String str)
复制代码
  1. toString()
复制代码
方法来抽丝剥茧,投过现象看本质。

先说StringBuilder的代码

  1.     public StringBuilder append(String str) {
  2.         super.append(str);
  3.         return this;
  4.     }



  5.     public String toString() {
  6.         // Create a copy, don't share the array
  7.         return new String(value, 0, count);
  8.     }
复制代码


再来看看StringBuffer的源代码:

  1.     public synchronized StringBuffer append(String str) {
  2.         super.append(str);
  3.         return this;
  4.     }

  5.     public synchronized String toString() {
  6.         return new String(value, 0, count);
  7.     }
复制代码


从这些代码上,可以很容易地看到StringBuffer的方法都加了synchronized锁。但是StringBuilder的方法却没有。而有时别不需要锁(比如只一个方法内部使用),而此时使用StringBuffer会增加无用的锁,效率就会下降。此时,使用StringBuilder才是更好的选择。
作者: 以利亚    时间: 2015-1-10 17:38
邓士林 发表于 2015-1-10 13:39
共同学习,共同进步

信息共享嘛,谁看就是谁的啦!:lol:P
作者: 执笔画梦    时间: 2015-1-10 17:49
学习了。
作者: 李增宽    时间: 2015-1-10 22:47
好多大神
作者: 探寻者    时间: 2015-1-10 23:06
StringBuffer 和 StringBuilder 的区别:
StringBuffer线程安全。
StringBuilder线程不安全。
单线程操作,使用StringBuilder 效率高。
多线程操作,使用StringBuffer 安全。
好像就这些区别,看视频总结的。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2