1. String、StringBuffer、StringBuilder区别
- String:不可变的字符序列;jdk1.0;char[]存储
- StringBuffer:可变的字符序列;线程安全;效率比Builder低;jdk1.0;常用多线程;char[]存储
- StringBuilder:可变的字符序列;线程不安全;效率高;jdk5.0;char[]存储
2. StringBuffer和StringBuilder为什么是可变?
- 它们的底层char[]存储是一个长度16的数组
3. 如果StringBuffer和StringBuilder中添加一个长度小于16的字符串,底层char[]的长度会怎样
- 底层char[]长度是:添加字符串的长度上+16
4. 对StringBuffer和StringBuilder使用length()输出的是什么?
- 里面字符串多长就多长,不用加16
5. 如果StringBuffer和StringBuilder中添加超过16个字符怎么办?
- 将原数组+添加字符的内容复制到一个新创造的一个长度为char[]长度×2+2的数组
- 如果原数组+添加字符的长度要比char[]长度×2+2还要大,就直接创造一个等于原数组+添加字符的长度的数组并将内容复制
- 默认情况下,扩容为原来容量2倍+2
提醒:
在开发中尽量使用public StringBuffer(int capacity) 构造器和public StringBulider(int capacity) 构造器,避免多次append会造成创建过多char[]数组