java中的String,StringBuilder,和StringBuffer的聯絡與區別
首先我們看這麼一個程式
public static void main(String[]args){
String str1 = "hello";
String str2 = str1+"word";
System.out.println(str2);
}
String
就是簡單的將str1與word相加賦給了str2,我們彙編瞭解一下
可以看到在內部String型別new出來的是StringBuilder型別的物件,然後採用StringBuilder.append方法將將word追加在str1後。
注意的是追加後使用StringBulider.toString方法
toString在內部也是new了一個String型別的物件,所以這也就是為什麼str1和str2的地址不同的原因。
StringBuilder
類似的我們實現這個程式碼
StringBuilder str = new StringBuilder("hello");
str.append("word");
System.out.println(str);
彙編瞭解
區別與String的是append追加word後並沒有建立新的物件。這就是StringBuild型別的天然優勢。
StringBuffder
public static void main(String[] args) { // TODO Auto-generated method stub StringBuffer str = new StringBuffer("hello"); str.append("word"); System.out.println(str); }
彙編處理
類似與StringBuilder,StringBuffer也是直接追加。
那麼兩者的區別在哪???
是這樣StringBuffer在定義的時候是被synchronized修飾,而synchronized代表的是類似同步鎖的東西,代表在這個執行緒中是安全的,所以一般我們在多執行緒中使用StringBuffer,而在單執行緒中這個安全檢測明顯是多餘的,所以單執行緒中StringBuilder常用一點。
而String型別在追加的時候會建立新的物件,所以如果要頻繁的追加,String型別我們不推薦。
如有不對,請多多指教。