由於String對象不能更改,只能新建那麼將會開闢新的內存,因此在字符串連接的時候,將會生成很多的字符串,效率不高,StringBuffer和StringBuilder會更好(連接的字符串不會生成新的字符串,而是進行原地的修改)
StringBuffer是多線程安全的,而StringBuilder不會但是速度會快一點,但是爲了保險起見用StringBuffer
用StringBuffer構造對象,初始容量可以容納16個字符,當長度大於16時,實體容量自動增加(n+1)*2
StringBuffer
@Test
public void Demo5(){
String str="java";
StringBuffer sb=new StringBuffer("java");//StringBuffer是一個類所以需要new
//連接字符串的區別
str=str+"abc"+"123";
sb.append("abc").append("123");
System.out.println(sb.capacity());//容量
sb.insert(5,"xyz");
System.out.println(sb.toString());//從5之後插入xyz
}
StringBuilder
public void demo6(){
StringBuilder sb=new StringBuilder("java");
sb.append("lllllaaaa");
sb.replace(1,3, "xyz");//替換
System.out.println(sb);//jxyzalllllaaaa
//String
String str="java";
str=str.replace("av", "xyz");//非原地修改
System.out.println(str);
}
注意:StirngBuffer和StringBuilder都是原地修改
而String得到的是一個返回的新的字符串