黑马程序员技术交流社区

标题: StringBuilder和StringBuffer [打印本页]

作者: 王丽达    时间: 2013-7-24 10:32
标题: StringBuilder和StringBuffer
什么时候用StringBuilder?什么时候该用StringBuffe呢?它们的区别
作者: 月亮人生    时间: 2013-7-24 10:53
1.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
2.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
作者: 深圳在漂移    时间: 2013-7-24 11:04
String是一个商品
StringBuffer/StringBuilder是生产这个商品的流水线,
StringBuffer速度慢,但(线程)安全性高
StringBuilder速度快,但(线程)安全性差

作者: 深圳在漂移    时间: 2013-7-24 11:04
单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

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


作者: liuzhming    时间: 2013-7-24 11:06
StringBuffer是字符串缓冲区,是一个容器,特点:1.长度是可变化的。2.可以字节操作多个数据类型。3.最终会通过toString方法变成字符串。JDK1.5 版本之后出现了StringBuilder。StringBuffer是线程同步,StringBuilder是线程不同步。以后开发,建议使用StringBuilder,因为它有三个主要优点:1.提高效率。2.简化书写。3.提高安全性。

作者: 冒烟的芒果    时间: 2013-7-24 11:13
简单地说,StringBuilder是JDK 5 为StringBuffer补充的一个单线程使用的等价类;
StringBuffer是线程安全的,也就是线程同步的;
StringBuilder是线程不安全的,同时由于它不考虑线程安全问题,所以它执行的速度更快
所以在字符串缓冲区只被单个线程使用的时候,都优先使用Stringbuilder
作者: yangqing    时间: 2013-7-24 11:16
当多线程操作需要保证安全问题是建议使用StringBuffe,单线程时可以用Stringbuilder替代,Stringbuilder是不同步的 速度较快。
区别就在于 StringBuffe 会将读取到的数据先存储到缓冲区中 而不会直接写入目的地。

作者: jialihong    时间: 2013-7-24 11:20
单线程的情况下用StringBuilder
多线程的情况下用StringBuffer
作者: wang100753    时间: 2013-7-24 13:54
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
StringBuffer和StringBuilder长度都是可以变化的。
StringBuffer是线程安全的,StringBuilder不是线程安全的。
作者: 诸隆隆    时间: 2013-7-24 15:12
本质没什么区别,Builder是1.5之后才有的,是新的,算是Buffer的改良版。除了对多线程的支持不一样外,这两个类的使用几乎没有任何差别。Builder同步不安全,所以单线程的话优选它,可以充分保证速度。如果要保证线程安全,自然非StringBuffer莫属了
作者: 王丽达    时间: 2013-7-25 18:26
谢谢大家!!!




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