为什么 String 是不可变的

1 为什么 String 是不可变的

查看源码,发现 String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。

2 这样设计的好处

  1. 可以视为常量,这样 Java Runtime 可以节省大量的 Java 堆空间,因为不同的 String 变量可以在 String Pool 中引用相同的 String 对象;
  2. 保障安全性。对于密码等敏感信息,用 String 对象表示,在方法调用的过程中肯定不会被修改;
  3. 线程安全,一个 String 实例可以在不同的线程中共享,不需要使用同步机制;
  4. 它的 hashcode 在创建时就被缓存了,一旦生成绝不改变,不需要再次计算。(因此 HashMap 常用 String 作为 key)

 

ref: