黑马程序员技术交流社区

标题: StringBuffer和StringBuilder具体区别 [打印本页]

作者: 戴乾刚    时间: 2013-3-13 16:14
标题: StringBuffer和StringBuilder具体区别
本帖最后由 戴乾刚 于 2013-3-13 20:03 编辑

StringBuffer和StringBuilder具体有什么区别?
作者: 黄欢    时间: 2013-3-13 16:18
本帖最后由 黄欢 于 2013-3-13 16:21 编辑

前一个有同步后一个没有,就是前者有线程安全,后者没有。使用基本上相同。速度上StringBuilder比StringBuffer快。单线程用StringBuilder,多线程用StringBuffe。有一节视频将了这个的。具体你自己看看吧。这个很好了解的。
作者: wanggang    时间: 2013-3-13 16:20
StringBuffer每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。


作者: 沉默de羔羊    时间: 2013-3-13 16:34
String类是不可变类,任何对String的改变都会引发新的String对象的生成,对于频繁的操作String的方法,会new出很对的新对象,对有jvm的回收很不方便,并且比较耗用系统资源。
而StringBuffer是可变类,每次的操作都是针对的他本身,所以只会生成一个对象,但是对于操作String少的情况下,StringBuffer的效率并没有String的高。
作者: 郑昌奋    时间: 2013-3-13 16:50
它们在使用功能上基本上没什么区别的,但是从性能方面来说。StringBuffer使用比较耗时一点,因为它是使用线程同步的,但后来JDK新版本上出现了StringBuilder,这个可以有效的提高了效率一点,因为StringBuilder是不同步的。以后如果你编写的程序跟线程同步没关系的,建议使用后者 处理速度快。
作者: 石伟    时间: 2013-3-13 17:05
在执行速度方面的比较:StringBuilder >  StringBuffer   





StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
StringBuilder:线程非安全的
StringBuffer:线程安全的

当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

                          1.如果要操作少量的数据用 = String
                    2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
                    3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

作者: 437857487    时间: 2013-3-13 17:26
StringBuilder是在j2se 1.5中新加的一个类,与StringBuffer相比他不是线程安全的,StringBuffer是线程安全的,但StringBuilder要比StringBuffer要快




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