Java軟件低級錯誤(二十 ):正確理解String/StringBuffer/StringBuilder的性能區別

 

解讀:
StringBuffer的內部實現方式和String不同,所以StringBuffer在進行字符串處理時,不生成新的對象,在內存使用上要優於String類。
 StringBuilder提供一個與StringBuffer兼容的API,該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因爲在大多數實現中,它比 StringBuffer 要快。兩者的方法基本相同。
¨案例:


//程序1
String tempstr1 = "abcdefghijklmnopqrstu";
int times1 = 10000;
long lstart1 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times1; i++)
{
str += tempstr1;
}
long lend1 = System.currentTimeMillis();
long time1 = (lend1 - lstart1);
System.out.println("string:"+time1);

 

// 程序2
String tempstr2 = "abcdefghijklmnopqrstu";
int times2 = 100000;
long lstart2 = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times2; i++)
{
            sb.append(tempstr2);
}
long lend2 = System.currentTimeMillis();
long time2 = (lend2 - lstart2);
System.out.println("stringBuffer:"+time2);


// 程序3
String tempstr3 = "abcdefghijklmnopqrstu";
int times3 = 100000;
long lstart3 = System.currentTimeMillis();
StringBuilder sb1 = new StringBuilder();
for (int i = 0; i < times3; i++)
{
            sb1.append(tempstr3);
}
long lend3 = System.currentTimeMillis();
long time3 = (lend3 - lstart3);
System.out.println("stringBuild:"+time3);


程序1的運行結果是:12062 ;程序2的運行結果是32;程序3的運行結果是15; StringBuffer 的速度幾乎是String 上萬倍;StringBuilder(StringBuilder類不是線程安全的)的速度是StringBuffer的數倍;當數量級較大時,他們的效率區別更明顯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章