Java SringBuffer和StringBuilder的toString效率

上文介紹了SringBuffer,StringBuilder和String在拼接字符串時候的效率對比。可以看出效率 StringBuilder > StringBuffer > String。但是我們在使用的過程中,最後都會把SringBuffer和StringBuilder轉成String進行使用。它們兩個都有toString方法可以調用,那麼它們轉成String的效率也是 StringBuilder > StringBuffer 嗎?

答案:不一定!!!

 

測試代碼走起:

@Test
    public void test2() {
        long startTime = 0L;
        long endTime = 0L;
        StringBuffer buffer = new StringBuffer("");
        StringBuilder builder = new StringBuilder("");
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            buffer.append(i);
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer的執行時間:" + (endTime - startTime));
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            builder.append(i);
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder的執行時間:" + (endTime - startTime));

        startTime = System.currentTimeMillis();
        buffer.toString();
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer轉成String,耗時:" + (endTime - startTime));

        startTime = System.currentTimeMillis();
       builder.toString();
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder轉成String,耗時:" + (endTime - startTime));
    }

這是我運行多次,截取了2次的結果截圖:

可以看出,多次運行也會出現StringBuffer的toString時間要小於StringBuilder的toString時間的情況。

 

總結:

在拼接字符串方面,StringBuilder要比StringBuffer效率要高,但是在轉成String的時候,兩者效率不相上下。

如何使用:

根據具體項目來判斷使用哪個,沒有必要糾結一定要使用哪個。

如果是單線程不需要考慮同步問題,則可以使用StringBuilder提高效率。

如果是多線程需要考慮數據同步問題,就要使用StringBuffer確保線程安全。

 

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