字串串連操作下的String和StringBuilder(一)

來源:互聯網
上載者:User

標籤:style   blog   http   java   color   使用   os   2014   

看第一種情形:用String做字串串連操作  串連一萬次

public class Demo_01 {    public static void main(String[] args) {        String str = "123";        String[] temp = new String[10000];        for (int i = 0; i < temp.length; i++) {            temp[i] = "456";        }                long begin = System.nanoTime()/1000000L;        System.out.println(begin);        for (int i = 0; i < temp.length; i++) {            str += temp[i];        }        long end = System.nanoTime()/1000000L;        System.out.println(end);        System.out.println("串連操作消耗的時間:"+(end-begin)+"毫秒");    }    }

編譯 執行 

 

 

做同樣的字串串連 也是串連一萬次 這次使用StringBuilder

public class Demo {    public static void main(String[] args) {        StringBuilder sb = new StringBuilder();        sb.append("123");        String[] temp = new String[10000];        for (int i = 0; i < temp.length; i++) {            temp[i] = "456";        }        long begin = System.nanoTime()/1000000L;        System.out.println(begin);        for (int i = 0; i < temp.length; i++) {            sb.append(temp[i]);        }        long end = System.nanoTime()/1000000L;        System.out.println(end);        System.out.println("串連操作消耗的時間:"+(end-begin)+"毫秒");    }}

編譯 執行 

 

對比執行消耗的時間,String是479毫秒  StringBuilder是2毫秒 。(毫秒數僅作參考,不同Pc配置和OS環境因素下可能不同)

做同樣的字串串連操作 使用StringBuilder用時僅需使用String的1/240左右。

可見做大量字串串連時用StringBuilder效率更高。

這學過Java的都知道啊,用你說。

 

可是為什麼做大量字串串連時 StringBuilder效率更高呢?

這是一個值得思考的問題。

 

嗯,我們先從編譯器給我們反饋的資訊看看。

對於用String進行串連,使用反組譯碼命令

得到如下資訊

可以看到79 行 goto語句指向47行 這之間是迴圈體。

嗯?我明明是用的String啊,但是事實上是編譯器擅作主張用了StringBuilder做串連操作。(StringBuilder效率高)

注意到54行 每次迴圈都會建立新的StringBuilder對象。

 

再看使用StringBuilder進行操作的情況:

反饋的資訊

注意看78行的goto語句 指向59行  這之間也是迴圈體。

但是這次迴圈體中只有一個StringBuilder對象。編譯器不會每次迴圈都建立新的StringBuilder對象。

所以相比使用String,在進行大量字串串連時,StringBuilder效率更高。

 

下一節將從源碼的角度出發,探討StringBuilder效率更高的原因。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.