以代碼來講解
String str="";
for(int i=0;i<10;i++){
str+="a";
}
str=str+"a"+"b";
使用jad反編譯以后
String str = "";
for(int i = 0; i < 10; i++)
str = (new StringBuilder()).append(str).append("a").toString();
str = (new StringBuilder()).append(str).append("a").append("b").toString();
我們可以看到,反編譯后的代碼,在for循環中,每次都是new了一個StringBuilder,然后再把String轉成StringBuilder,再進行append。
而頻繁的新建對象當然要耗費很多時間了,不僅僅會耗費時間,頻繁的創建對象,還會造成內存資源的浪費。
我為什么在for循環外寫str=str+"a"+"b";
,是為了告訴大家,不是一個”+“
就創建一個StringBuilder
結論:
- 如果不是在循環體中進行字符串拼接的話,直接使用+就好了。
- 如果在並發場景中進行字符串拼接的話,要使用StringBuffer來代替StringBuilder。