String中的“+”和StringBuilder

如題,大家都能看出來這是要做字符串連接操作,有些基礎的人都會知道,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,請記住,對於一個方法而言,參數是爲該方法提供信息的,而不是讓該方法改變自己。--->這樣會使得代碼更容易閱讀和編寫。

好險啊,差點就沒堅持,呵,天啊,這才第二天啊,亮哥加油!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章