Java String为什么不可变?
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
//...
}
String 类中使用 final 关键字修饰字符数组来保存字符串,所以String 对象是不可变的。
被
final关键字修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象。因此,final关键字修饰的数组保存字符串并不是String不可变的根本原因,因为这个数组保存的字符串是可变的(final修饰引用类型变量的情况)。
String不可变的真正原因:
- 保存字符串的数组被
final修饰且为私有的,并且String类没有提供/暴露修改这个字符串的方法。 String类被final修饰导致其不能被继承,进而避免了子类破坏String不可变。

浙公网安备 33010602011771号