一直听说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,如果超出会重新初始化,然后复制销毁。

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 */ }