StringBuffer和String的區別
| String | StringBuffer | |
|---|---|---|
| 創建方法 | String s1 = “abc”; String s2 = new String(“abc”); | 只有 StringBuffer sb = new StringBuferr(“abc”); |
| 拼接 | 使用運算子"+"或者利用StringBuffer拼接字串 | append()方法,不能使用+的方式 |
System.out.println("String型別:");
String s1 = new String("abc");
String s2 = s1;
System.out.println("修改前:s1的值" + s1);
System.out.println("修改前:s2的值" + s2);
System.out.println("修改前s1 == s2:" + (s1 == s2));
s1 = s1 + "abc";
System.out.println("修改后:s1的值" + s1);
System.out.println("修改后:s2的值" + s2);
System.out.println("修改后s1 == s2:" + (s1 == s2));
System.out.println("StringBuffer型別:");
StringBuffer sb1 = new StringBuffer(s1);
StringBuffer sb2 = sb1;
System.out.println("修改前:sb1的值" + sb1);
System.out.println("修改前:sb2的值" + sb2);
System.out.println("修改前sb1 == sb2:" + (sb1 == sb2));
sb1.append("bb");
System.out.println("修改后:sb1的值" + sb1);
System.out.println("修改后:sb2的值" + sb2);
System.out.println("修改后sb1 == sb2:" + (sb1 == sb2));
結果:

String型別的s1的拼接字串,是被賦予了新的地址,并且不影響原先地址(s2)里的值
StringBuffer型別的sb1拼接字串,并沒有改變地址,而是直接改變地址里的值,會影響其他指向這個地址的變數的值(如s2)
StringBuilder
StringBuilder和StringBuffer類似,
相同:
- 都是可變字串,
- 初始容量是16個字符
- 擴容:newCapacity = (value.length << 1) +2,即容量×2+2
區別是:
- StringBuffer對執行緒安全,StringBuilder對執行緒不安全
- 性能:因為StringBuilder不需要保證執行緒安全,性能方面比StringBuffer好
- 緩沖區方面StringBuilder算是對StringBuffer的一個優化,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238020.html
標籤:其他
下一篇:初識tomcat
