A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//验证字符串直接相加的低效。
public class StringConcatCount {

    String  str;
    String  str1;
    int runtimes =10000;
    StringBuilder  sb = new StringBuilder();
    public long plusTime(){                                 //直接相加。
        long beginTime  = System.currentTimeMillis();
        for(int i=0;i<runtimes; i++){
            str +="a"+"b";
        }
        long endTime = System.currentTimeMillis();
        return  endTime-beginTime;
    }
   
    public long StringConcatTime(){               // 调用concat方法。
        long beginTime  = System.currentTimeMillis();
        for(int i=0;i<runtimes; i++){
            str1 +="a".concat("b");
        }
        long endTime = System.currentTimeMillis();
        return  endTime-beginTime;
    }
   
    public long StringBuiderTime(){               // 用StringBuilder或者是StringBuffer。
        long beginTime  = System.currentTimeMillis();
        for(int i=0;i<runtimes; i++){
            sb.append("a");
            sb.append("b");
        }
        long endTime = System.currentTimeMillis();
        return  endTime-beginTime;
    }
    public static void main(String[] args) {
        
        StringConcatCount scc = new StringConcatCount();
        System.out.println(scc.plusTime());
        System.out.println(scc.StringConcatTime());
        System.out.println(scc.StringBuiderTime());      
    }
}
有这样一种解释: String str = "a" + s; 这样子的,其效率与String str = new StringBuilder().append("a").append(s).toString();是一样的。
那么是不是说:每做一次 + 就产生个 StringBuilder对象,然后 append 后就扔掉。下次循环再到达时重新产生个 StringBuilder对象,
                        然后 append字符串,如此循环直至结束。如果我们直接采用 StringBuilder 对象进行 append 的话,我们可以节省 N-1次创建和销毁对象的时间。
这样的话从内存优化的角度来说,用StringBuffer或者是StringBuilder代替字符串相加不失为一种方法。
欢迎大神们来讨论。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马