1、与String类的区别
String中的字符内容不能够改变,效率很低,为了提高效率,所以有了StringBuffer。
StringBuffer和StringBuilder一模一样,也是字符串,不过是内容可以改变的Unicode字符序列,任何内容的修改都不会产生新对象,内部数据可以变化。
StringBuffer是一个保存字符的容器,底层实现仍然是char数组。
2、StringBuffer构造器、常用方法
StringBuilder stringBuilder = new StringBuilder(); //默认初始容量为16
StringBuilder stringBuilder1 = new StringBuilder(5); //指定容量的字符串缓冲区
StringBuilder stringBuilder2 = new StringBuilder("jflsjnmn,l"); //将内容初始化为指定字符
System.out.println(stringBuilder2);
append方法:在字符串末尾追加任意数据
@Test
public void test(){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("计算机");
stringBuilder.append(100);
stringBuilder.append('a');
stringBuilder.append("anc");
stringBuilder.append(true);
System.out.println(stringBuilder);
String string = stringBuilder.toString();
System.out.println(string);
System.out.println(string.length());
}
默认StringBuffer数组大小为16,在执行append方法时,若数组已满,则进行扩容操作,扩容大小为原始大小乘2加2,将原数组中所有内容复制到新数组中。
insert方法:在指定位置添加新数据
reverse方法:翻转字符
stringBuilder.insert(4,"我是插入的内容");
System.out.println(stringBuilder);
stringBuilder.reverse();
System.out.println(stringBuilder);
setCharAt方法:在指定位置插入指定字符
delete方法:删除在区间a到b的所有字符
stringBuilder.setCharAt(0,'X');
System.out.println(stringBuilder);
stringBuilder.delete(3,5);
System.out.println(stringBuilder);
练习:声明3个字符创,用第一个作为参数创建StringBuffer对象,第二个串接在末尾,第三个串接在开头。
@Test
public void exer(){
String s1 = "11111111";
String s2 = "22222222";
String s3 = "33333333";
StringBuffer stringBuffer = new StringBuffer(s1);
stringBuffer.append(s2);
stringBuffer.insert(0,s3);
System.out.println(stringBuffer);
}
注意:
StringBuffer是线程安全的,效率低。
Stringbuilder是线程不安全的,效率高。