如題,大家都能看出來這是要做字符串連接操作,有些基礎的人都會知道,String是不可修改的,而正因爲此,大家一定會認爲,用“+”將String相連接會隨着“+”的增多,而產生越來越多的String,性能一定十分低,而真是這樣嗎?
例如:
public class Concatenation{
public static void main(String[] args){
String mango = "mango" ;
String s = "abc"+ mango + "def" +47 ;
System.out.println(s) ;
}
}
如上代碼,按我以前的想法,該方法爲了得到最後的[s],過程中產生了兩個垃圾--->[abcmango],[abcmangodef],但是,其實不是這樣的!!!
用命令
|-java -c Concatenation
生成JVM字節碼文件,這是你會看出(J2SE1.5以上)編譯器自動引入了StringBuilder類,並且調用了四次append()方法,最終調用toString(),來完成操作。
但是,你要注意,你不可以仗着編譯器會給你轉成StringBuilder就隨意的“+”,這種優勢只體現在沒有循環的情況下,當有循環的時候,在循環體中每次“+”都會新實例化一個StringBuilder的對象這樣也相當的影響性能,而此時,需要你在循環體外定義StringBuilder對象,再在循環體中進行append(),這樣的性能是最好的!
大家可千萬不要小瞧了StringBuilder啊,他可是最快的啦,比StringBuffer要快(StringBuffer是考慮線程安全的!所以會慢些),當你需要循環上百次,甚至循環中套循環的話,StringBuilder絕對是提高性能的良方。
by the way,請記住,對於一個方法而言,參數是爲該方法提供信息的,而不是讓該方法改變自己。--->這樣會使得代碼更容易閱讀和編寫。
好險啊,差點就沒堅持,呵,天啊,這才第二天啊,亮哥加油!