文章出處

之前一篇里寫過字符串常用類的三種方式《java中的字符串相關知識整理》,只不過這個只是分析并不知道他們之間會有多大的區別,或者所謂的StringBuffer能提升多少拼接效率呢?為此寫個簡單的測試吧:

 

public static void main(String[] args) {
        testStringJoin();
    }

    static void testStringJoin() {
        
        long beg = System.currentTimeMillis();
        String s = null;
        for (int i = 0; i < 100000; i++) {
            s += "ss";
        }
        
        System.out.println("使用+拼接耗時:" + (System.currentTimeMillis() - beg));
        
        beg = System.currentTimeMillis();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 100000; i++) {
            sb.append("ss");
        }
        System.out.println("使用StringBuffer拼接耗時:" + (System.currentTimeMillis() - beg));
        
        beg = System.currentTimeMillis();
        StringBuilder sbuilder = new StringBuilder();
        for (int i = 0; i < 100000; i++) {
            sbuilder.append("ss");
        }
        System.out.println("使用StringBuilder拼接耗時:" + (System.currentTimeMillis() - beg));
        
    }
    

代碼非常簡單,分別用三種方式拼接字符串10萬次,然后計算耗時情況,跑下來還是蠻驚人的:

使用+拼接耗時:9102
使用StringBuffer拼接耗時:3
使用StringBuilder拼接耗時:2

使用+拼接耗時:8956
使用StringBuffer拼接耗時:5
使用StringBuilder拼接耗時:3

兩組跑來的數據,大的數據相差不大,而且表現的結果也是一致的。這里可以看到使用+這種常量拼接對性能消耗極大,10萬次用時9000ms,而StringBuffer和StringBuilder只用了不到5ms。看來一個簡單的字符串拼接還是要重視的,之前沒想到會有這么夸張的體現。

至于StringBuffer和StringBuilder來說差別不是特別大,更多的還是考慮線程安全就可以了,也就是說用StringBuffer是種比較保險的方式吧,除非對性能有極高的要求。

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()