2024-03-14
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1773658369

回答

我们都知道 String 是不可变的,那它是如何来实现不可变的呢?主要依赖下面几个机制。

  • 私有不可变数组

String 底层使用一个私有的字符数组来存储字符串数据,同时这个数组被声明为 final。这就意味着数组的引用是不可以被重新指向另一个数组,保证了 String 对象创建后其内部数组不能指向其他数据。

private final char value[];

注意,从 Java 9 开始,String 底层数组改用byte[] 加上编码标记(coder),以优化性能和存储空间,但这不影响不可变性的基本原理。请参考:Java 9 为什么要改变 String 的底层数组?

  • 类声明为 final

String 类被声明为 final,这就意味着 String 不允许被继承,这就阻止了任何想通过继承String并覆盖 String 的方法来改变 String 不可变的行为。

保证了String的行为不会被任何子类修改。