1700442670
1700442671
for(int i=0;i<50000;i++){
1700442672
1700442673
sb.append(“c”);
1700442674
1700442675
}
1700442676
1700442677
String str=sb.toString();
1700442678
1700442679
}
1700442680
1700442681
StringBuffer的append方法的执行时间是0毫秒,说明时间非常非常短暂(毫秒不足以计时,读者可以使用纳秒进行计算)。这个实验也说明在字符串拼接方式中,append方法最快,concat方法次之,加号最慢,这是为何呢?
1700442682
1700442683
(1)“+”方法拼接字符串
1700442684
1700442685
虽然编译器对字符串的加号做了优化,它会使用StringBuilder的append方法进行追加,按道理来说,其执行时间也应该是0毫秒,不过它最终是通过toString方法转换成String字符串的,例子中“+”拼接的代码与如下代码相同:
1700442686
1700442687
str=new StringBuilder(str).append(“c”).toString();
1700442688
1700442689
注意看,它与纯粹使用StringBuilder的append方法是不同的:一是每次循环都会创建一个StringBuilder对象,二是每次执行完毕都要调用toString方法将其转换为字符串—它的执行时间就是耗费在这里了!
1700442690
1700442691
(2)concat方法拼接字符串
1700442692
1700442693
我们从源码上看一下concat方法的实现,代码如下:
1700442694
1700442695
public String concat(String str){
1700442696
1700442697
int otherLen=str.length();
1700442698
1700442699
//如果追加的字符串长度为0,则返回字符串本身
1700442700
1700442701
if(otherLen==0){
1700442702
1700442703
return this;
1700442704
1700442705
}
1700442706
1700442707
//字符数组,容纳的是新字符串的字符
1700442708
1700442709
char buf[]=new char[count+otherLen];
1700442710
1700442711
//取出原始字符串放到buf数组中
1700442712
1700442713
getChars(0,count, buf,0);
1700442714
1700442715
//追加的字符串转化成字符数组,添加到buf中
1700442716
1700442717
str.getChars(0,otherLen, buf, count);
1700442718
1700442719
//复制字符数组,产生一个新的字符串
[
上一页 ]
[ :1.70044267e+09 ]
[
下一页 ]