关于String和StringBuilder、StringBuffer的一个简单机能测试

    添加时间:2013-8-5 点击量:

    String a=String b + String c + String d


    这种代码在法度里应当到处可见,一项目组人不知道这段代码的缺点在哪,另一项目组人知道如许写不好,然则太顺手了下意识就写了。


    在Java里,String是个不成变对象,所以右边的每次赋值操纵都邑new一个新对象,b+c,b+c+d,至少会new两个,很明显机能不佳。然则这个题目没有大多半景象下没我们想象的那么严重,因为编译器在编译时会对String做很多优化,然则对于一些运行时的赋值和批改操纵,编译器很难优化,这种时辰,就强烈不推荐如许写,固然写的很顺手 ,然则机能不可,若是存在字符串的批改操纵,就应当用StringBuilder和StringBuffer。


    下面,就用一个简单的测试,来看看他们之间的机能差别,让我们冷暖自知。


    1. 测试String直接拼接



     1     public static void main(String[] args) {
    
    2 long begin = System.currentTimeMillis();
    3 String str = ;
    4 forint i=0;i<10000;i++){
    5 str = str+i;
    6 }
    7 long end = System.currentTimeMillis();
    8 long time = end - begin;
    9 System.out.println(time+);
    10 }


    直接用String的拼接,轮回调用10000次,跑出来成果是639毫秒


    2.测试String.concat拼接



     1     public static void main(String[] args) {
    
    2 long begin = System.currentTimeMillis();
    3 String str = ;
    4 forint i=0;i<10000;i++){
    5 str = str.concat(String.valueOf(i));
    6 }
    7 long end = System.currentTimeMillis();
    8 long time = end - begin;
    9 System.out.println(time+);
    10 }


    也是轮回调用10000次,跑出来成果是322毫秒


    3.测试StringBuilder拼接



     1     public static void main(String[] args) {
    
    2 long begin = System.currentTimeMillis();
    3 StringBuilder sb = new StringBuilder();
    4 forint i=0;i<10000;i++){
    5 sb.append(i);
    6 }
    7 long end = System.currentTimeMillis();
    8 long time = end - begin;
    9 System.out.println(time+);
    10 }
    11
    12 }


    同样轮回调用10000次,成果是5毫秒。换成StringBuffer,成果也是一样。


    上方这个简单测试,可以用数据告诉我们,String和StringBuilder、StringBuffer之间的机能差距了,所以若是字符串有变革,都用StringBuilder和StringBuffer,而不是用简单粗暴的赋值操纵,别的就是,上方可以看出,String的concat机能也明显优于直接拼接。


    关于StringBuilder和StringBuffer


    这两个操纵可变字符串的类,都实现了AbstractStringBuilder抽象类,接口也几乎一样,他的最大差别是:StringBuffer根蒂根基所有办法都做了同步,而StringBuilder没有,换言之,StringBuffer是线程安然的,StringBuilder不是。所以这两个就按照不合的场景做弃取就ok。

    我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
    分享到: