1 不可变的原因
- String的主要成员变量char value[]是private final类型的;
- String被声明为final class,是典型的Immutable类;
2 不可变的好处
1 可以缓存 hash 值
因为 String 的 hash 值经常被使用,例如 String 用作 HashMap 的 key。 不可变的特性可以使得 hash 值也不可变,因此只需要进行一次计算。
2 String Pool 的需要
如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。 只有 String 是不可变的,才可能使用 String Pool。
3 安全性
String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。
4 线程安全
String 不可变性天生具备线程安全,可以在多个线程中安全地使用。