# 为什么 String 被设计为不可变的
## 字符串常量池
String 不可变的第一个好处是可以使用字符串常量池。在 Java 中有字符串常量池的概念,比如两个字符串变量的内容一样,那么就会指向同一个对象,而不需创建第二个同样内容的新对象,例如:
```java
String s1 = "lagou";
String s2 = "lagou";
```
其实 s1 和 s2 背后指向的都是常量池中的同一个“lagou”。正是因为这样的机制,再加上 String 在程序中的应用是如此广泛,我们就可以节省大量的内存空间。
## 用作 HashMap 的 key
String 不可变的第二个好处就是它可以很方便地用作 HashMap (或者 HashSet) 的 key。通常建议把不可变对象作为 HashMap的 key,比如 String 就很合适作为 HashMap 的 key。
对于 key 来说,最重要的要求就是它是不�