StringBuffer和StringBuilder是可变的字符串缓冲序列
原理:
- 预先在内存中申请一块空间,可以容纳字符序列(字符数组)
- 如果预留空间不够,会进行自动扩容
- 底层都是char[] ,并且默认初始化容量是16个字符
String,StringBuffer,StringBuilder的区别:
- String不可变字符序列,而StringBuilder和StringBuffer是可变字符序列
- StringBuffer线程安全,在多线程环境下,不会出现问题,所以效率低,一般常用于类中
- StringBuilder非线程安全,在多线程环境下可能出现问题,效率高,一般用于方法中
关于扩容问题:
如果要添加的数据底层数组装不下,那么需要对数组进行扩容,扩容后的长度为之前长度的两倍再加二。
StringBuffer str = new StringBuffer(“abc”);
在初始化底层数组时,数组的长度为3+16=19