大家都说StringBuilder在单线程下比StringBuffer效率高,但我的运行结果怎么相反呢??请大家测试一下,并指正。
我的程序如下:public class StringTest{ public static void main(String args[]){
long startTime1 = System.currentTimeMillis();
String text = "";
for(int i=0;i<10000;i++){
text+=i;
}
System.out.println(System.currentTimeMillis()-startTime1);

long startTime2 = System.currentTimeMillis();
StringBuffer textBuffer = new StringBuffer("");
for(int i=0;i<10000;i++){
textBuffer.append(i);
}
System.out.println((System.currentTimeMillis()-startTime2));

long startTime3 = System.currentTimeMillis();
StringBuilder textBuilder = new StringBuilder("");
for(int i=0;i<10000;i++){
textBuilder.append(i);
}

System.out.println((System.currentTimeMillis()-startTime3));

}}
结果:
3828
0
16

解决方案 »

  1.   

    10000次测试,数据量太小,得到的结果不一定准确,把循环增大再试试看就知道了public class StringTest{    public static void main(String args[]){
            int max = 1000000; //如果内存足够大,可以改成 max = Integer.MAX_VALUE;
    //        long startTime1 = System.currentTimeMillis();
    //        String text = "";
    //        for(int i=0;i<10000;i++){
    //            text+=i; //这个就不用测了,大家都知道这种是效率最低的
    //        }
    //        System.out.println(System.currentTimeMillis()-startTime1);
            
            long startTime2 = System.currentTimeMillis();
            StringBuffer textBuffer = new StringBuffer("");
            for(int i=0;i<max;i++){
                textBuffer.append(i);
            }
            System.out.println((System.currentTimeMillis()-startTime2));
            
            long startTime3 = System.currentTimeMillis();
            StringBuilder textBuilder = new StringBuilder("");
            for(int i=0;i<max;i++){
                textBuilder.append(i);
            }
            
            System.out.println((System.currentTimeMillis()-startTime3));
            
        }}
      

  2.   

    在实际的应用中很少会有这么多次的字符串串联,所以可以得出结论:在实际应用中,不用过分考虑StringBuilder和StringBuffer的选择谢谢你,请纠正