Android String&StringBuilder&StringBuffer比速-附代碼及數據


說明:
String 為常量,每次必創造新常量賦值,耗內存及效能
StringBuilder及StringBuffer為變量, 後者可synchronized線程安全

實驗:
分別跑三萬筆累加字串,測試效能。

結果:
2020-01-06 15:58:32.670 4166-4166/adamtest, String: 24794(ms)
2020-01-06 15:58:32.685 4166-4166/adamtest, StringBuilder:5(ms)
2020-01-06 15:58:32.705 4166-4166/adamtest, StringBuffer:18(ms)

結論:
單線程盡量用StringBuilder, 多線程保障安全時才用StringBuffer

int count = 30000;
long startNs = System.nanoTime();
String str = "";
for(int i=0;i<count;i++){
    str = str + i;
}
long tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs);
LogUtils.e("adam", "adamtest, String: "+ tookMs+"(ms) "+str);

long startNs2 = System.nanoTime();
StringBuilder stringBuilder = new StringBuilder();
for(int i=0;i<count;i++){
    stringBuilder.append(i);
}
long tookMs2 = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs2);
LogUtils.e("adam", "adamtest, StringBuilder:"+ tookMs2+"(ms) "+stringBuilder);

long startNs3= System.nanoTime();
StringBuffer stringBuffer = new StringBuffer();
for(int i=0;i<count;i++){
    stringBuffer.append(i);
}
long tookMs3 = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs3);
LogUtils.e("adam", "adamtest, StringBuffer:"+ tookMs3+"(ms) "+stringBuffer);</pre>

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料