黑马程序员技术交流社区
标题:
有谁能帮小弟理一下StringBuffer和StringBuilder的关系。
[打印本页]
作者:
吴亨
时间:
2012-2-15 21:56
标题:
有谁能帮小弟理一下StringBuffer和StringBuilder的关系。
本帖最后由 吴亨 于 2012-2-16 09:09 编辑
求高手指点。
作者:
李杨
时间:
2012-2-15 22:19
这个是执行效率。
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 22:28
StringBuilder是对字符串操作的,不支持并发操作同一个StringBuilderr对象,
StringBuffer内部实际上也是一个StringBuilder,只是把StringBuffer 的每一个方法前加上了synchronized ,比如
StringBuilder sb=new StringBuilder();
public synchronized StringBuffer append(String str)
{
sb.append(str);}
作者:
黄锦成
时间:
2012-2-15 22:32
StringBuilder是非同步的,效率比较高,这个类在jdk1.5的版本时出来的。StringBuffer是同步的,效率比较低,这个类在jdk1.0的版本就出来了。关于同步的问题,如果不知道,那要到你学习多线程的时候才能知道
作者:
许涛
时间:
2012-2-15 23:31
本帖最后由 许涛 于 2012-2-15 23:34 编辑
记得老师上课有讲过jdk升级无非是三个方面:安全、效率、书写
jdk1.5之后出现的StringBuilder则是对效率方面的提升,StringBuilder比StringBuffer高效。
总的来说就是StringBuilder效率比较高,单线程一般用StringBuilder,但是它用于多个线程
是不安全的。而StringBuffer的特点是低效,但是线程同步,较安全
作者:
吴亨
时间:
2012-2-16 09:09
谢谢,懂了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2