標籤: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效率更高的原因。