//验证字符串直接相加的低效。
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代替字符串相加不失为一种方法。
欢迎大神们来讨论。
|