回答
我们都知道 String
是不可变的,那它是如何来实现不可变的呢?主要依赖下面几个机制。
- 私有不可变数组
String
底层使用一个私有的字符数组来存储字符串数据,同时这个数组被声明为 final
。这就意味着数组的引用是不可以被重新指向另一个数组,保证了 String
对象创建后其内部数组不能指向其他数据。
private final char value[];
注意,从 Java 9 开始,String
底层数组改用byte[]
加上编码标记(coder
),以优化性能和存储空间,但这不影响不可变性的基本原理。请参考:Java 9 为什么要改变 String 的底层数组?
- 类声明为 final
String
类被声明为 final
,这就意味着 String 不允许被继承,这就阻止了任何想通过继承String
并覆盖 String
的方法来改变 String
不可变的行为。
保证了String
的行为不会被任何子类修改。