StringBuffer类
概述:
public StringBuffer() {
super(16);
}
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
当向StringBuffer中添加内容时,将内容添加到底层的数组中,该数组没有被final修饰。
当数组装满是,会创建一个新数组,将新数组地址赋给底层数组,StringBuffer对象不会变。
添加功能:
append():向数组末尾追加内容。
insert():向指定位置添加内容。
StringBuffer stringBuffer1 = new StringBuffer("abcdefg");
stringBuffer1.append("aa");
stringBuffer1.insert(2, "abc");
删除功能:
deleteCharAt():删除指定位置内容。
delete():删除指定区间内容,包含开始,不包含结束位置。
StringBuffer stringBuffer1 = new StringBuffer("abcdefg");
stringBuffer1.delete(0, 2);
stringBuffer1.deleteCharAt(1);
替换功能:
replace():替换指定区间内容。
反转功能::
reverse():逆序字符串。
StringBuffer stringBuffer1 = new StringBuffer("abcdefg");
stringBuffer1.replace(0, 2, "123");
stringBuffer1.reverse();
截取功能:
substring():从指定位置开始截取,返回值为string。
String s1 = new String(stringBuffer1);
stringBuffer1.substring(3);
System.out.println(stringBuffer1);
System.out.println(s1);
StringBuilder类:多线程不安全, 可变字符串
String,StringBuffer,StringBuilder三者区别
String:底层都是数组实现, final char[ ] 值不能改变,改变后会创建一个新的对象,如果我们在实际开发过程中需要对字符串进行频繁的修改,不要使用String,否则会造成内存空间的浪费。
StringBuffer:线程安全,可变字符串 char[ ] ,StringBuffer几乎所有的方法都使用synchronized实现了同步,线程比较安全,在多线程系统中可以保证数据同步,但是效率比较低;而StringBuilder 没有实现同步,线程不安全,在多线程系统中不能使用 StringBuilder,但是效率比较高。
StringBuilder:线程不安全,可变字符串。