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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨尧 于 2012-5-21 20:11 编辑

StringBuffer和StringBuilder的具体区别,我查了很多资料,最后还是感觉只在线程安全上有点区别,希望大神赐教,越详细越好!因为有个老师曾经问过我这个问题,我回答的不是很好,我想彻底搞透他!!

9 个回复

正序浏览
{:soso_e112:}共勉
回复 使用道具 举报
踩单车的幸福 发表于 2012-5-19 00:29
StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上 ...

谢谢了,回复的很全面,学习了!!
回复 使用道具 举报
StringBuffer和StringBuilder的具体区别
1.StringBuilder线程不安全,单线程下效率高。出自JDK1.5
2.StringBuffer线程安全,但效率稍低。出自JDK1.0
回复 使用道具 举报
彩虹 中级黑马 2012-5-19 01:22:50
7#
   StringBuffer:线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。用于多个线程。可以在必要时对这些方法进行同步。
   StringBuilder:一个可变的字符序列。提供一个与 StringBuffer 兼容的 API,但不保证同步。是 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。它比 StringBuffer实现 要快,执行效率更高。
回复 使用道具 举报
   StringBuffer:线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。用于多个线程。可以在必要时对这些方法进行同步。
   StringBuilder:一个可变的字符序列。提供一个与 StringBuffer 兼容的 API,但不保证同步。是 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。它比 StringBuffer实现 要快,执行效率更高。
回复 使用道具 举报
1.
StringBuffer对象的内容可以修改而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象例如:
StringBuffer str = new StringBuffer("a");str.append("bc");String str2 = "a";str2 = str2 + "bc";str引用的一直是同一对象而str2引用的在两句中是完全不同的对象
回复 使用道具 举报
        StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,
                特别是内容要修改时,那么使用StringBuffer,如果最后需要String,
                那么使用StringBuffer的toString()方法。线程安全。

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

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

评分

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

查看全部评分

回复 使用道具 举报
1.StringBuilder线程不安全,单线程下效率高。
2.StringBuffer线程安全,但效率稍低。
3.一般情况下,要组装字符串时,用StringBuilder就行了,如果是多线程又要考虑线程安全的情况下就用StringBuffer。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马