public class Test
{
public static void main (String args[]){
String str="";
long starTime=System.currentTimeMillis();
for(int i=0;i<10000;i++){
str+=i;
}
long endTime=System.currentTimeMillis();
long time=endTime-starTime;
System.out.println("String use time="+time);
StringBuilder builder=new StringBuilder("");
 starTime=System.currentTimeMillis();
for(int j=0;j<10000;j++){
builder.append(j);
}
     endTime=System.currentTimeMillis();
 time=endTime-starTime;
System.out.println("StringBuilder use time="+time); }
}
测试结果:String use time=1078
StringBuilder use time=0
StringBuilder的测试时间怎么会是0呢?
难道是测试的代码写错了?

解决方案 »

  1.   

    currentTimeMillis--这个不行使用微秒
      

  2.   


    public class Test {
       
    public static void main (String args[]){
        String str="";
        long starTime=System.nanoTime() ;
        for(int i=0;i<10000;i++){
        str+=i;
        }
        long endTime=System.nanoTime();
        long time=endTime-starTime;
        System.out.println("String use time="+time);
        StringBuilder builder=new StringBuilder("");
        starTime=System.nanoTime() ;
        for(int j=0;j<10000;j++){
        builder.append(j);
        }
            endTime=System.nanoTime();
        time=endTime-starTime;
        System.out.println("StringBuilder use time="+time);     }
    } 反正时间长友点差距,用System.nanoTime() ;函数你试验下,应该能看出来。
      

  3.   

    System.nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位。
      

  4.   

    应为 stringBuffer 只在开始 new 时会花点时间,而 append时,只会花极少的时间,只是在链表后面追加而已。string 拼接的话,每次都有新对象产生,所以耗时很多。至于后面时间为 0,是时间精度不够,改高点的试试