黑马程序员技术交流社区
标题:
StringBuffer和StringBuilder的区别?
[打印本页]
作者:
蒙武辉
时间:
2012-2-15 01:34
标题:
StringBuffer和StringBuilder的区别?
字符串中StringBuffer和StringBuilder有什么区别?怎么时候用StringBuffer?怎么时候用StringBuilder?可以举个例子说明一下吗?
作者:
李杨
时间:
2012-2-15 04:35
这个是执行效率。
public class Test10
{
public static void main(String[] args)
{
StringBuffer strBuf = new StringBuffer();
String str = "hello";
int times = 1500000;
long beginTime = System.currentTimeMillis();
for(int i = 0; i < times; i++)
{
strBuf.append(str);
}
System.out.println("StringBuffer耗时:" + (System.currentTimeMillis() - beginTime));
System.out.println("========================================");
StringBuilder strBud = new StringBuilder();
beginTime = System.currentTimeMillis();
for(int i = 0; i < times; i++)
{
strBud.append(str);
}
System.out.println("StringBuilder耗时:" + (System.currentTimeMillis() - beginTime));
}
}
StringBuffer耗时:265
========================================
StringBuilder耗时:156
原因就是StringBuffer要进行同步操作,这样就大大增加了开销。
StringBuilder没有同步,相对StiringBuilder要高效很多。
随便提醒一下,加入 String str = "";要是进行str += "hello";执行那么多次的话,会消耗掉比StringBuffer上万倍的耗时。所以以后进行字符串拼接啊插入啊增加啊最好先选择
StringBuilder,要是在多线程多就要用StringBuffer。千万别用直接的字符串 += 来拼接字符串了。
你可以进行测试,就是刚才我说的让str执行+=操作,最后计算它们的执行时间你就明白了。
作者:
刘丁
时间:
2012-2-15 04:43
StringBuffer是字符串缓存区,它的内容可以被修改,长度也可以改变,StringBuffer类是线程安全的,也就是说多个线程可以安全的访问StringBuffer对象。StringBuilder与StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果你只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高些。
作者:
唐林渊
时间:
2012-2-15 07:51
StringBuffer就好比一个装东西的数据 比如这样写 StringBuffer sb= new StringBuffer() 装的时候sb.(里面装数字)
作者:
侯丽星
时间:
2012-2-15 08:12
StringBuffer:是线程安全的可变字符序列。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuilder:一个可变的字节序列,此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,
用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。
将StringBuilder的实例用于多个线程是不安全的,如果需要这样的同步,则建议使用StringBuffer。
作者:
黄锦成
时间:
2012-2-15 08:57
StringBuffer是同步的,效率低,安全。
StringBuilder是不同步的,效率高。
它们俩的方法没什么区别。建议使用StringBuilder
作者:
戚雪晖
时间:
2012-2-16 22:40
毕老师一句经典:因为StringBuilder是后出的,因此建议使用StringBuilder{:soso_e113:}
作者:
自己玩
时间:
2012-2-16 23:12
StringBuffer是线程同步的,所以自然效率低
StringBuilder是线程不同步的,效率比StringBuffer高一些
Stringbuilder相当于对StringBuffer的升级,应该是围绕升级中三要素:1,提高效率;2,简化书写,3,提高安全性的 提高安全性而来的
实际开发中建议是用StringBuilder
作者:
熊玖帅
时间:
2012-2-17 09:07
StringBuffer是线程安全的.StringBuilder不是线程安全的,它的运行速度比StringBuffer快.StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。 当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。 每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
作者:
王康
时间:
2012-2-17 10:17
StringBuilder 是 JDK5.0 中新增加的一个类,它跟 StringBuffer 的区别看下面的介绍:
Java.lang.StringBuffer线程安全的可变字符序列。类似于 String 的字符串缓冲区,长度不可变。可将字符串缓冲区安全地用于多个线程。Java.lang.StringBuffer可以实现线程同步。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。
如果内部缓冲区溢出,则此容量自动增大。从 JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder 。
与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
但是如果将 StringBuilder 的实例用于多个线程是不安全的。需要这样的同步,多使用 StringBuffer 。
在大部分情况下 StringBuilder > StringBuffer
使用率选择顺序建议
StringBuilder > StringBuffer > String
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2