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