拼接字元串,大緻有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 的分享