以前在看到一篇文章,說到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);
}
複製代碼
根據《阿里巴巴開發手冊》裏的說法,這種寫法通常會引發空間浪費問題。下面仔細說下爲何會引發這類問題。併發
javac Test.java
javap -c Test.class
能夠大概看出在11行的時候new了一個java.lang.StringBuilder的對象,其餘就是一些操做數棧到變量,變量到操做數棧的賦值過程。想要看懂相應字節碼錶明的意思,能夠參考文章: Java生成字節碼的意思
若是還不夠直觀,能夠看下面的方式。app
這裏就能夠更明顯地看出其實每次循環的時候都會去new一個StringBuilder對象,而後再toString,最後賦值給s。工具