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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王丽达 中级黑马   /  2013-7-24 10:32  /  1340 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候用StringBuilder?什么时候该用StringBuffe呢?它们的区别

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

10 个回复

倒序浏览
1.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
2.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
String是一个商品
StringBuffer/StringBuilder是生产这个商品的流水线,
StringBuffer速度慢,但(线程)安全性高
StringBuilder速度快,但(线程)安全性差
回复 使用道具 举报
单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

回复 使用道具 举报
StringBuffer是字符串缓冲区,是一个容器,特点:1.长度是可变化的。2.可以字节操作多个数据类型。3.最终会通过toString方法变成字符串。JDK1.5 版本之后出现了StringBuilder。StringBuffer是线程同步,StringBuilder是线程不同步。以后开发,建议使用StringBuilder,因为它有三个主要优点:1.提高效率。2.简化书写。3.提高安全性。
回复 使用道具 举报
简单地说,StringBuilder是JDK 5 为StringBuffer补充的一个单线程使用的等价类;
StringBuffer是线程安全的,也就是线程同步的;
StringBuilder是线程不安全的,同时由于它不考虑线程安全问题,所以它执行的速度更快
所以在字符串缓冲区只被单个线程使用的时候,都优先使用Stringbuilder
回复 使用道具 举报
当多线程操作需要保证安全问题是建议使用StringBuffe,单线程时可以用Stringbuilder替代,Stringbuilder是不同步的 速度较快。
区别就在于 StringBuffe 会将读取到的数据先存储到缓冲区中 而不会直接写入目的地。
回复 使用道具 举报
单线程的情况下用StringBuilder
多线程的情况下用StringBuffer
回复 使用道具 举报
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
StringBuffer和StringBuilder长度都是可以变化的。
StringBuffer是线程安全的,StringBuilder不是线程安全的。
回复 使用道具 举报
本质没什么区别,Builder是1.5之后才有的,是新的,算是Buffer的改良版。除了对多线程的支持不一样外,这两个类的使用几乎没有任何差别。Builder同步不安全,所以单线程的话优选它,可以充分保证速度。如果要保证线程安全,自然非StringBuffer莫属了
回复 使用道具 举报
谢谢大家!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马