天天看點

java 拼接字元串 效率_java 幾種拼接字元串的效率問題

拼接字元串,大緻有3個class可以用,他們是String, StringBuffer,StringBuilder, StringBuilder是1.5中來代替StringBuffer的。檢驗方法如下:

public class test {

public static void main(String[] args) {

// TODO Auto-generated method stub

long n = 30000;

System.out.println("Start... "+n);

long start1 = System.currentTimeMillis();

String s1 = new String("hello");

for (long i = 0; i < n; i++)

{

s1+="拼接字元串的時間";

}

long end1 = System.currentTimeMillis();

long time1 = end1 -start1;

System.out.println("用String+=拼接字元串的時間"+time1);

long start2 = System.currentTimeMillis();

String s2 = new String("hello");

for (long i = 0; i < n; i++)

{

s2=s2+"拼接字元串的時間";

}

long end2 = System.currentTimeMillis();

long time2 = end2 -start2;

System.out.println("用String=String+拼接字元串的時間"+time2);

long start3 = System.currentTimeMillis();

String s3 = new String("hello");

for (long i = 0; i < n; i++)

{

s3=s3.concat("拼接字元串的時間");

}

long end3 = System.currentTimeMillis();

long time3 = end3 -start3;

System.out.println("用String.concat拼接字元串的時間"+time3);

long start4 = System.currentTimeMillis();

StringBuffer s4 = new StringBuffer("hello");

for (long i = 0; i < n; i++)

{

s4.append("拼接字元串的時間");

}

long end4 = System.currentTimeMillis();

long time4 = end4 -start4;

System.out.println("用StringBuffer.append拼接字元串的時間"+time4);

long start5 = System.currentTimeMillis();

StringBuilder s5 = new StringBuilder("hello");

for (long i = 0; i < n; i++)

{

s5.append("拼接字元串的時間");

}

long end5 = System.currentTimeMillis();

long time5 = end5 -start5;

System.out.println("用StringBuilder.append拼接字元串的時間"+time5);

System.out.println("End...");

}

}

貼出一組檢測資料如下:

Start... 30000

用String+=拼接字元串的時間27468

用String=String+拼接字元串的時間25813

用String.concat拼接字元串的時間12265

用StringBuffer.append拼接字元串的時間14

用StringBuilder.append拼接字元串的時間8

End...

1、String類本身是final類型,字元串拼接時,會使用StringBuffer,并調用append,之後再調用toString方法。而StringBuffer轉換成String時,開銷相當大。中間不僅創立了臨時對象StringBuffer,還每次完後再要轉成String。

2、在做字元串連接配接時,String類的concat方法優于+号。 ( String += ) 與 ( String = String + ) 相率相當。

3、而

StringBuilder的出現就是用來替換StringBuffer的,但不适宜于多線程程式設計。從這點兒上來說,StringBuilder

在單線程程式設計情況下應優先于StringBuffer使用,而在多線程程式設計時則應使用StringBuffer,不宜使用StringBuilder 。

4、單線程情況下做字元串連接配接,StringBuilder.append 與 StringBuffer.append 效率相當。

文章轉載自:http://blog.csdn.net/amork/article/details/4307072   謝謝 amork 的分享