package date1014pm.字符串效率比较;
public class CompareString {
public static void main(String[] args) {
int num = 100000;
buildString(num);
buildStringBuffer(num);
buildStringBuilder(num);
}
public static void buildString(int num){
String a = "ab";
long time1 = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
a+=i+"";
}
System.out.println("String耗时:"+(System.currentTimeMillis()-time1)+"毫秒");
}
public static void buildStringBuilder(int num){
StringBuilder a = new StringBuilder("ab");
long time1 = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
a.append(i+"");
}
System.out.println("StringBuilder耗时:"+(System.currentTimeMillis()-time1)+"毫秒");
}
public static void buildStringBuffer(int num){
StringBuffer a = new StringBuffer("ab");
long time1 = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
a.append(i+"");
}
System.out.println("StringBuffer耗时:"+(System.currentTimeMillis()-time1)+"毫秒");
}
}
运行结果:
String耗时:80787毫秒
StringBuffer耗时:83毫秒
StringBuilder耗时:73毫秒
居然相差一千倍。。。。考虑到一次执行了三个方法,于是为了公平起见。每次只运行一个方法。
StringBuffer 5次运行结果:
StringBuffer耗时:161毫秒
StringBuffer耗时:124毫秒
StringBuffer耗时:133毫秒
StringBuffer耗时:129毫秒
StringBuffer耗时:131毫秒
StringBuilder 5次运行结果:
StringBuilder耗时:187毫秒
StringBuilder耗时:131毫秒
StringBuilder耗时:116毫秒
StringBuilder耗时:118毫秒
StringBuilder耗时:115毫秒
忽略最高和最低(首次启动受影响)。可以看到StringBuilder比StringBuffer效率更高一些。因为前者没有线程同步。
而String呢:
String耗时:81321毫秒
。。。已经没必要再测了。。。
下面来看StringBuilder与StringBuffer连续拼接的能力:
for(int i= 0;i<10;i++){
buildStringBuffer(num);
buildStringBuilder(num);
System.out.println();
}
StringBuffer耗时:124毫秒
StringBuilder耗时:82毫秒
StringBuffer耗时:64毫秒
StringBuilder耗时:45毫秒
StringBuffer耗时:51毫秒
StringBuilder耗时:43毫秒
StringBuffer耗时:49毫秒
StringBuilder耗时:70毫秒
StringBuffer耗时:56毫秒
StringBuilder耗时:36毫秒
StringBuffer耗时:41毫秒
StringBuilder耗时:40毫秒
StringBuffer耗时:42毫秒
StringBuilder耗时:40毫秒
StringBuffer耗时:76毫秒
StringBuilder耗时:72毫秒
StringBuffer耗时:73毫秒
StringBuilder耗时:37毫秒
StringBuffer耗时:41毫秒
StringBuilder耗时:37毫秒
因为是相同的方法。时间越来越低,毫不犹豫地怀疑虚拟机做了某些优化。
String表示望洋兴叹,自动要求减一个零,降低一个级数,循环只循环一万次:
String耗时:810毫秒
String耗时:655毫秒
String耗时:594毫秒
String耗时:681毫秒
String耗时:563毫秒
String耗时:622毫秒
String耗时:518毫秒
String耗时:550毫秒
String耗时:555毫秒
String耗时:548毫秒
仍然相差甚远。
它们之间的效率比较就是这样了。