由于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得到的是一个返回的新的字符串