StringBuilder
默认容量大小:
1.无参数构造时,默认容量大小为16.
StringBuilder stb = new StringBuilder() // 默认初始大小16
super父类的构造方法,传入16大小创造字符数组。
/**
* Creates an AbstractStringBuilder of the specified capacity.
*/
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
2.传入初始化大小 n 时,默认容量大小为 n
StringBuilder stb = new StringBuilder(11) // 默认大小就是自定义的 11
3.传入字符串s进行初始化时, 默认容量大小为 s.length( ) + 16;
StringBuilder stb = new StringBuilder("123456") // 默认容量大小为 16 + 6
扩容机制
StringBuilder默认扩容机制是 value.length() *2 + 2 .
在进行添加append操作的时候会先判断容量大小是否可以存放新进的字符串长度,不够就进行扩容。
StringBuffer
默认容量大小以及扩容机制相同。
引入了 synchronized 关键字进行加锁操作,保证线程安全。
从下面代码可以看到其加锁操作在各个方法上面,对于字符数组char 没有进行 final 修饰,这是为了提高效率以及保证安全性总和考虑 就在方法上加了锁操作。
char[ ] 字符数组没有进行final等机制。
总结:
StringBuffer 和 StringBuilder 扩容机制相同,初始化容量机制相同。
两者安全性不同,效率不同,更多可以参考