String StringBuilder StringBuffer
# String
String 被声明为final, 因此它不可以被继承。
内部使用char 数组存储数据,该数组被声明为final,所以一旦数组被初始化后就不能再改变引用为其它数组。 而且String 类不提供改变数组内容的方法, 这些使得String 成为一个不可变类。
# 为什么不可变
# 缓存哈希值
不可变的特性可以使得hash 值也不可变, 经常被用作于map 的key。
# 常量池
代码中字符串出现的场景非常多,包括类、 字段、 方法等等, String 不可变, 所以可以将这些字符串放到常量池中, 相同的字符串使用常量池中同一个引用, 节省内存。
# 安全性
String 对象经常作为参数传递, 防止在传递过程中字符串被改变。
# 线程安全
由于String的不可变特性, 使得它可以作为线程安全类在多线程环境中安全使用。
# String, StringBuffer and StringBuilder
# 可变性
String 不可变
StringBuilder StringBuffer可变
# 并发
String 线程安全
StringBuilder 非线程安全
StringBuffer 方法使用synchronized进行同步, 单个方法调用是线程安全的,组合使用非线程安全。
编辑 (opens new window)
上次更新: 2023/04/09, 16:34:32