1、可变性
String类使用了final char[] value修饰的字符数组,不可变
StringBuilder、StringBuffer也是使用char[] value字符数组来保存字符串,但是没有用final,是可变的
2、线程安全性
String对象是不可变的,也理解为常量,线程安全
StringBuilder:不安全
StringBuffer:线程安全,对调用的方法加了同步锁
3、效率
StringBuilder:效率高;StringBuffer:效率低
4、源码分析
- String:
- StringBuffer:
空参构造:
初始化容量是16个字符
有参构造:
扩容问题: