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

 

posted @ 2012-11-05 14:16  爱我所艾  阅读(1019)  评论(0编辑  收藏  举报