JavaRush /Java Blog /Random-TW /String += String 還是 StringBuilder.append(String)?
SemperAnte
等級 4
Донецк

String += String 還是 StringBuilder.append(String)?

在 Random-TW 群組發布
在這篇文章中,我想考慮、分析、講述和展示類別中的append方法和forStringBuilder操作 符之間的差異。這裡的問題與其說是應用領域,不如說是程式碼最佳化。 +=String
String += String 還是 StringBuilder.append(String)? - 1
是的,毫無疑問沒有深入研究這個問題的人會說:「為什麼我要透過創建一個完全不同的類別的新物件來替換 += 運算符,然後也呼叫該方法toString()?我們是什麼樣的最優性? “在說什麼?選擇是顯而易見的,你在說什麼?” 他就完全錯了。問題之一是String它並不原始。String- 與 Java 中的任何其他對像一樣的對象class,如您所知,在Java 中不存在運算符重載(例如在C++ 中),運算符僅為基元定義,對於任何類,我們都不能重寫任何運算符。這就是為什麼運算符“ +”和“ +=”是Java庫的一種“拐杖”,而拐杖總是會帶來損失。實際上,讓我們停止拉貓尾巴並繼續進行測量。這是一個簡單的程序,用於測量將一行與循環變數「黏合」100,000 次所需的時間。
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        String s = "Hello";
        for(int i = 0; i < 100000; ++i)
        {
            s+=i;
        }
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
在我的電腦上,控制台顯示 6815ms。也就是說,我的電腦花了將近 7 秒鐘的時間才把這條線拼接在一起。現在讓我們用 StringBuilder 替換它,甚至將該方法包含toString()在測量中。
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        StringBuilder sb = new StringBuilder("Hello");
        for(int i = 0; i < 100000; ++i)
        {
            sb.append(i);
        }
        String s = sb.toString();
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
我的電腦告訴我 10 毫秒。即 0.01 秒。我認為實踐中的差異是相當明顯的;粗略地說,它的運行速度append快了700倍。這是因為,很可能「+」和「+=」本身可以調用相同的附加,但同時為了理解這樣的運算符是否存在以及它是什麼,已經在語言的拐杖中走了很長的路。應該做(最後一段只不過是猜測,我不是JVM 開發人員,我不知道那裡有什麼以及如何做)。這是一個明顯的例子,說明額外的物件並不總是昂貴的。是的,程式碼會長幾行,但在大型專案中節省的時間可能是巨大的。請注意,這些測量並不是在配備史前處理器的辦公室電腦上進行的,但現在想像一下,在這台幾乎無法拉動圍巾的辦公室電腦上,它會產生多大的變化。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION