不要再使用String字符串拼接了,這樣優化性能提升十幾倍

相信很多Java開發的小夥伴對String字符串拼接都不陌生,或多或少都使用過,因爲方便使用。但殊不知頻繁使用字符串拼接會嚴重降低性能。今天我們看一看如何讓String拼接提升十幾倍的性能。

那麼應該從編譯講起,Java 從 JDK5 開始,便在編譯期間進行了優化。如果是無變量的字符串拼接,那麼在編譯期間值都確定了, javac 工具會直接把它編譯成一個字符常量。如果有變量的字符串拼接,在編譯期間變量的值是無法確定,所以在運行期間會生成一個StringBuilder 對象。從這裏可以看出兩者的區別在於有沒有生成StringBuilder對象,如果頻繁使用有變量的字符串拼接,那麼也就會生成很多StringBuilder對象,必然對性能就會造成影響。

我們使用循環內的字符串拼接舉個例子

// 循環中使用字符串拼接
String a = "0";
Long start = System.currentTimeMillis();
for (int i = 1; i < 10000; i++) {
    a = a + i;
}
System.out.println("字符串拼接執行一萬次時間:" + (System.currentTimeMillis() - start) + " 毫秒");


// 循環外定義StringBuilder
start = System.currentTimeMillis();
StringBuilder b = new StringBuilder();
for (int i = 1; i < 5000000; i++) {
    b.append(i);
}
System.out.println("使用StringBuilder執行五百萬次時間:" + (System.currentTimeMillis() - start) + " 毫秒");

大家可以想象一下,如代碼所示,在循環中使用字符串拼接的話,只循環一萬次的執行時間,和在循環外定義StringBuilder,在循環中使用append,循環五百萬次的執行時間,哪個更優呢?哈哈哈 循環次數可是 500倍之差哦!!

 可以見得!! 一萬次的執行時間比五百萬次的執行時間還長 130毫秒!!! 

原因在於 使用字符串拼接,每循環一次就會產生一個新的 StringBuilder 對象,對資源有一定的損耗。這裏循環一萬次也就是會產生一萬個 StringBuilder 對象。。而循環外使用 StringBuilder,循環內再執行 append() 方法拼接字符串,不管循環幾次都只會產生一個 StringBuilder 對象。可怕可怕😱

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