String、StringBuffer、StringBuilder的一些小經驗……,bufferbuilder
一說String、StringBuffer和StringBuilder,想必大家都很熟悉,這三者經常在我們的面試題中出現,我也是看到了關於這三個的經典面試題,才觸動了我之前工作中的一些經曆,故而根據我自己的經驗,來寫寫自己的感悟,分享於諸位。
首先來看下我看到的這兩道面試題:
1.String和StringBuffer區別,哪個效率高。
答:String 是對一串字元進行操作是不可變類
StringBuffer是對一串字元進行操作,但是可變類
String每用一次就需要產生一次效率低。
2.StringBuffer和StringBuilder有什麼區別?
答:Stringbuilder 和Stirngbuffer都是可變對象,Stringbuilder 的運行速度快,線程不安全。
這兩道題的答案是正確的,但是在實際編碼中如何來合理運用這三者呢?
首先,String類型是不可變的,那麼我們一定要切記不能用String在迴圈中使用連接字串,特別是web工程中,當大量訪問的情況下,這種方式消耗的資源非常大。如下:
1 //這種串連方法一定要避免2 for(int i=0;i<100;i++){3 String a = "a";4 String b = "b";5 System.out.println(a+b);6 }
那麼,String應該用到什麼情況下呢?我們根據它不可變的性質,當遇到重複使用的固定的字串時,將字串定義為靜態常量,再使用StringBuffer或StringBuilder來進行拼接操作。如下:
1 public class StringTest { 2 3 private static final String STRING = "天"; 4 5 public void setSystem(){ 6 StringBuilder f = new StringBuilder("5"); 7 System.out.println(f.append(STRING)); 8 } 9 10 public static void main(String[] args) {11 StringTest s = new StringTest();12 s.setSystem();13 }14 }
接下來,講StringBuffer和StringBuilder的使用場合。
我們已知:StringBuffer是安全執行緒的,速度較慢的;而StringBuilder是不安全的,速度較快的。
那麼我們要分析一下,是保證安全執行緒,還是追求速度。
我們在進行web項目開發時,通常會使用架構,那就要看看使用的架構是單線程的還是多線程的,如果架構是安全執行緒的,那我們就可以追求速度,使用StringBuilder即可。如果是不安全的,那最好使用StringBuffer。
不過這也不是絕對的,在開發中可以根據項目要求來靈活選擇。