a 线程安全
b. 速度相对于StringBuilder慢
c. 自动扩容(本质还是新开辟一个新的数组(把value的指向改成了这个新的数组))
StringBuffer对象名.append(CharSequence s);
//这个CharSequence是String类实现的接口,里面可以传入String对象
//本质还是多态的一种体现
package Work;
public class Test05 {
public static void main(String[] args) {
StringBuffer stringBuffer=new StringBuffer("abc");
//此时stringBuffer对象的初始空间为传入字符串长度+16,改的还是自身的空间,append里面的参数也可以是任意类型
stringBuffer.append(100);
System.out.println(stringBuffer);
}
}

StringBuffer对象名.reverse();
package Work;
public class Test05 {
public static void main(String[] args) {
StringBuffer stringBuffer=new StringBuffer("abc");
//此时stringBuffer对象的初始空间为传入字符串长度+16,改的还是自身的空间,append里面的参数也可以是任意类型
stringBuffer.reverse();
//StringBuffer方法的所有方法都是会去对自己操作,会修改自己
System.out.println(stringBuffer);
}
}

StringBuffer对象名.insert(int offSet,插入元素);
//插入元素可以是任意类型,offSet为插入的位置,这样原来的offSet以及其后的元素都会往后移动一格
package Work;
public class Test05 {
public static void main(String[] args) {
StringBuffer stringBuffer=new StringBuffer("abc");
//此时stringBuffer对象的初始空间为传入字符串长度+16,改的还是自身的空间,append里面的参数也可以是任意类型
stringBuffer.insert(0,100);
System.out.println(stringBuffer);
}
}

StringBuffer stringBuffer=new StringBuffer();
package Work;
public class Test05 {
public static void main(String[] args) {
//创建一个StringBuffer对象,底层的数组长度为16,如果是JDK1.8,那么底层就是char数组,如果是JDK13,那么底层为byte类型的数组
StringBuffer stringBuffer=new StringBuffer();
}
}


StringBuffer stringBuffer=new StringBuffer(底层数组容量);
package Work;
public class Test05 {
public static void main(String[] args) {
//创建一个StringBuffer对象,底层的数组长度为16,如果是JDK1.8,那么底层就是char数组,如果是JDK13,那么底层为byte类型的数组
//给多少数字,那底层的数组长度就为多少
StringBuffer stringBuffer=new StringBuffer(32);
//此时stringBuffer的底层数组长度为32
}
}

StringBuffer stringBuffer=new StringBuffer(CharSequence seq);
//这个字符序列实际上可以传入任意字符串,因为String类实现了CharSequence接口
//只不过是多态的一种体现罢了
//得到的底层数组长度=传入的字符串长度+16;
package Work;
public class Test05 {
public static void main(String[] args) {
//创建一个StringBuffer对象,底层的数组长度为16,如果是JDK1.8,那么底层就是char数组,如果是JDK13,那么底层为byte类型的数组
StringBuffer stringBuffer=new StringBuffer("abc");
//此时stringBuffer的底层数组长度为3+16=19
}
}

a 线程不安全
b. 速度相对于StringBuffer快
c. 自动扩容(本质还是新开辟一个新的数组(把value的指向改成了这个新的数组))
与StringBuffer拥有的方法的使用方式差不多,这里就不赘述了
对于使用很少的固定不变的量,就使用+
对于需要频繁拼接的操作,建议用StringBuffer中的append操作,不要用concat
因为concat能实现的功能append不仅能实现,而且更省空间(StringBuffer只要没有超过容量都不用去开辟新的数组空间)
解答:预估容量(把底层的数组按照这个长度来),这样就能减少自动扩容的次数(每扩容一次,都会开辟一个新的数组空间,然后还会把原数组的值依次放入新数组中,这些操作都是需要耗费时间的)