阿里巴巴Java開發手冊:for循環裏拼接字符串爲何最好用StringBuilder?

前言

以前在看到一篇文章,說到for循環裏拼接字符串最好用StringBuilder,而不是String+=「」,聯想到讀過的《阿里巴巴Java開發手冊》也有相似的說辭。但那是看了以後沒再深究,因此借這篇文章深刻分析一下爲何for循環裏拼接字符串爲何最好用StringBuilder?java

舉例

平時寫代碼的時候,咱們常常會遇到在一個循環裏去拼接字符串,爲了追求效率,不少人會直接寫上以下的代碼:bash

public static void main(String[] args) {
        String s= "" ;
        for(int i=1;i<10;i++){
            s+=i;
        }
        System.out.println(s);
    }
複製代碼

分析

根據《阿里巴巴開發手冊》裏的說法,這種寫法通常會引發空間浪費問題。下面仔細說下爲何會引發這類問題。併發

  • 使用字節碼工具在cmd裏執行
    javac Test.java
    javap -c Test.class

能夠大概看出在11行的時候new了一個java.lang.StringBuilder的對象,其餘就是一些操做數棧到變量,變量到操做數棧的賦值過程。想要看懂相應字節碼錶明的意思,能夠參考文章: Java生成字節碼的意思
若是還不夠直觀,能夠看下面的方式。app

  • 使用jad工具反編譯代碼

這裏就能夠更明顯地看出其實每次循環的時候都會去new一個StringBuilder對象,而後再toString,最後賦值給s工具

總結

  1. 在單線程少併發的狀況下,儘可能用StringBuilder代替簡單粗暴的+=,減小新生成對象的空間浪費。
  2. +=其實是java語言提供給String類型的語法糖,其實現原理是使用StringBuilder.append。
相關文章
相關標籤/搜索