当前位置: 代码迷 >> J2SE >> 误区:大家都说StringBuilder在单线程下比StringBuffer效率高解决思路
  详细解决方案

误区:大家都说StringBuilder在单线程下比StringBuffer效率高解决思路

热度:243   发布时间:2016-04-24 02:26:52.0
误区:大家都说StringBuilder在单线程下比StringBuffer效率高
大家都说StringBuilder在单线程下比StringBuffer效率高,但我的运行结果怎么相反呢??请大家测试一下,并指正。
我的程序如下:
Java code
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

------解决方案--------------------
10000次测试,数据量太小,得到的结果不一定准确,把循环增大再试试看就知道了

Java code
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));            }}
  相关解决方案