java的String与StringBuffer
一直听说StringBuffer的性能比String高很多,正好这本书的第一章就是关于这个例子的,所以小小的试验了下。
PS:循环的次数比书中的多,2000年的电脑配置1W次循环就很明显,但是现在不够啦。
结果是40922ms与0ms的差距
public void String2StringBuffer(){
String str = "tr";
long start1 = System.currentTimeMillis();
System.out.println(start1);
for(int i = 0 ;i<80000; i++)
str = str + "-tr";
System.out.println(System.currentTimeMillis());
System.out.println(System.currentTimeMillis() - start1);
StringBuffer sb = new StringBuffer("sb");
long start2 = System.currentTimeMillis();
System.out.println(start2);
for(int j = 0 ; j< 80000 ;j++)
sb.append("-sb");
System.out.println(System.currentTimeMillis());
System.out.println(System.currentTimeMillis() - start2);
/* System.out.println();
1352090136281
1352090177203
40922
1352090177203
1352090177203
0 */
}
String相加也有不同的方法,在试试:
又是0ms与15ms的区别,虽然不知道为什么,待分析。
public void String2String(){
String str1,str2;
long start1 = System.currentTimeMillis();
for(int i=0;i<=10000;i++)
str1 = "hello"+"world"+"ufida";
System.out.println(System.currentTimeMillis()-start1);
long start2 = System.currentTimeMillis();
for(int i =0;i<=10000;i++){
str2 = "hello";
str2+="world";
str2+="ufida";
}
System.out.println(System.currentTimeMillis()-start2);
/*System.out.println();
0
15 */
}
都说StringBuffer初始化大小比不初始化大小快,因为默认是16,如果超出会重新初始化,然后复制销毁。
View Code
public StringBuffer() { super(16); } public StringBuffer(String str) { super(str.length() + 16); append(str); }
结果:的确是快了15ms,但是循环了100W次,所以这个性能提升不是很大。
public void StringBuffer2StringBuffer(){
StringBuffer sb1 = new StringBuffer();
long start1 = System.currentTimeMillis();
for(int i = 0;i<=1000000;i++)
sb1.append("sb1");
System.out.println(System.currentTimeMillis()-start1);
StringBuffer sb2 = new StringBuffer(3000001);
long start2 = System.currentTimeMillis();
for(int i = 0;i<=1000000;i++)
sb2.append("sb2");
System.out.println(System.currentTimeMillis()-start2);
/*System.out.println();
78
63 */
}
因为年轻,所有没有失败。


浙公网安备 33010602011771号