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进行同步, 单个方法调用是线程安全的,组合使用非线程安全。

上次更新: 2023/04/09, 16:34:32
最近更新
01
go-admin-ui项目仿写练手1-登录页
06-29
02
maven依赖问题
06-17
03
JVM相关命令
02-21
更多文章>