字符串拼接性能比較出乎意料的結果

 一直認爲String拼接大字符串時用StringBuffer能比直接用+號性能更高,今天偶然發現不居然,是有前提的。若是String對象沒用從新賦值,而是一次性把字符串拼接好賦值給String變量時性能是最高的(第二個例子String2)。若是String使用的是+=從新賦值,這時性能確實要比StringBuffer慢2-3倍左右(第一個例子String1)。app

public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            String result = "This is ";
            result += "testing the";
            result += "difference between";
            result += "String and StringBuffer";
        }
        long endTime = System.currentTimeMillis();
        System.out.println(String.format("String+ 1 cost: %s millis", (endTime - startTime)));

        startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            String result = "This is" + "testing the" + "difference" + "between" + "String" + "and" + "StringBuffer";
        }
        endTime = System.currentTimeMillis();
        System.out.println(String.format("String+ 2  cost: %s millis", (endTime - startTime)));

        startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            StringBuffer sbResult = new StringBuffer();
            sbResult.append("This is ");
            sbResult.append("testing the");
            sbResult.append("difference between");
            sbResult.append("String and StringBuffer");
            sbResult.toString();
        }
        endTime = System.currentTimeMillis();
        System.out.println(String.format("StringBuffer cost: %s millis", (endTime - startTime)));
    }

 

運行結果:性能

相關文章
相關標籤/搜索