String 字符串的拼接方式有以下幾種:“+”號拼接、concat()、StringBuilder、StringBuffer
先說結論,就性能方面而言,建議使用順序為 StringBuilder > StringBuffer > concat() > "+"
StringBuilder 和 StringBuffer 都是可變字符串,但StringBuilder不是線程安全的,適用於單線程環境,StringBuffer 是線程安全的,用於多線程環境。
兩者的實現是封裝一個可修改的字符數組,字符數組中可以有空位置未被使用,有實例變量記錄已使用的字符個數,append方法會直接拷貝字符到內部的字符數組,如果長度不夠還可以拓展。
StringBuilder 方法的實現
StringBuffer 在方法中加上synchronized關鍵字,即加鎖保證線程安全。
“+”號拼接實現原理是將String轉成了StringBuilder后,使用其append方法進行處理的。
1 String str0 = "a"; 2 StringBuilder sb = new StringBuilder(); 3 sb.append(str0).append("b"); 4 String str1 = sb.toString();
concat() 拼接首先創建一個字符數組,長度是已有字符串和待拼接字符串的長度之和,再把兩個字符串的值復制到新的字符數組中,並使用這個字符數組創建一個新的String對象並返回。
經過concat方法,其實是new了一個新的String。
從0到10萬的所有數字進行拼接,得到如下結果,可以看到StringBuilder效率最高