String | StringBuffer | StringBuilder |
---|---|---|
不可变 | 可变 | 可变 |
线程安全 | 安全 | 不安全 |
少量数据 | 多线程大量 | 单线程大量 |
String为什么是不可变的?
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
//...
}
- 保存String的字符数组,被private final修饰
- 方法被final修饰,不能被继承
字符串拼接底层
String之间的’+',实际上是通过StringBuilder调用append方法
缺点:创建过多的StringBuilder对象
字符串常量池
存放对字符串的引用,避免重复创建
String.intern()
// 将指定的字符串对象的引用保存在字符串常量池中