java StringBuffer与String比较那个更快



java StringBuffer与String比较那个更快?字符串相加实例代码介绍。怎么提高性能。大家都知道StringBuffer的性能比String高,速度也很快。正好学到了到这里,现在做一个实验。StringBuffer与String循环的次数比书中的多,如果你电脑配置不是很好,那么结果会更加明显。结果是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,假如超出会重新初始化,之后复制销毁。

结果:的确是快了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              */
  }