您的位置:首页 > 产品设计 > UI/UE

String、StringBuffer、StringBuilder的性能测试

2008-06-05 06:11 435 查看
个人理解
String为固定长度的不可变的字符串
StringBuilder为可变的,且提供个最好的性能,其代码如下

publicStringBuilderappend(inti){
super.append(i);
returnthis;
}

StringBuffer为可变的,且提供了同步安全的机制,代码如下publicsynchronizedStringBufferappend(inti){
super.append(i);
returnthis;
}


可以看到2个的区别就是StringBuffer是同步的synchronized


下面是3个性能测试代码

importjava.util.Map;

publicclassMyTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
testString();
testStringBuilder();
testStringBufer();
}

staticintNUMBER=10000;

publicstaticvoidtestString(){
longbegin=System.currentTimeMillis();
Stringstr="";
for(inti=1;i<NUMBER;i++){
str=str+i;
}
System.out.println("testString="+(System.currentTimeMillis()-begin));
}

publicstaticvoidtestStringBuilder(){
longbegin=System.currentTimeMillis();
StringBuilderb=newStringBuilder();
for(inti=1;i<NUMBER;i++){
b.append(i);
}
Stringstr=b.toString();
System.out.println("testStringBuilder="+(System.currentTimeMillis()-begin));
}

publicstaticvoidtestStringBufer(){
longbegin=System.currentTimeMillis();
StringBufferb=newStringBuffer();
for(inti=1;i<NUMBER;i++){
b.append(i);
}
Stringstr=b.toString();
System.out.println("testStringBufer="+(System.currentTimeMillis()-begin));
}
}


运行结果如下

testString=750
testStringBuilder=0
testStringBufer=0

可见String的操作是非常消耗资源的,而另外2个则性能优异。


对于StringBuilder和StringBuffer的对比,就没有必要了。他们的代码相同,只是缺少了同步而已。


结论

大多是情况下,StringBuilder是很好的选择
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: