为什么String是不可变的?
为什么String是不可变的?
月伴飞鱼字符串是一个常量,一旦创建了一个 String 对象,就无法改变它的值。
它的内容也就不可能发生变化(不考虑反射这种特殊行为)。
String 具备不变性背后的原因是什么:
1 | public final class String |
private final
的 char 数组,数组名字叫 value。它存储着字符串的每一位字符,同时 value 数组是被 final 修饰的,这个 value 一旦被赋值,引用就不能修改了。
除了构造函数之外,并没有任何其他方法会修改 value 数组里面的内容。
- 而且 value 的权限是 private,外部的类也访问不到,所以最终使得 value 是不可变的。
String 类是被 final 修饰的,所以这个 String 类是不会被继承的。
因此没有任何人可以通过扩展或者覆盖行为来破坏 String 类的不变性。
String 不可变的好处
1、使用字符串常量池。
2、用作 HashMap 的 key。
3、缓存 HashCode。
4、线程安全。