A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴乾刚 中级黑马   /  2013-3-13 16:14  /  1755 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴乾刚 于 2013-3-13 20:03 编辑

StringBuffer和StringBuilder具体有什么区别?

6 个回复

倒序浏览
本帖最后由 黄欢 于 2013-3-13 16:21 编辑

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

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

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





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

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

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

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1 赞一个!

查看全部评分

回复 使用道具 举报
StringBuilder是在j2se 1.5中新加的一个类,与StringBuffer相比他不是线程安全的,StringBuffer是线程安全的,但StringBuilder要比StringBuffer要快
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马