public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[];
String类的前三行代码,可以看到用final修饰了类,表示该类不能被继承。
通过构造函数也能看出string其实是一个char数组,也就是第三行代码 注意是 private和final的
String不可变更性,很大一部分原因是这个private,因为final修饰的对象,不可变的是它是引用地址,并不是堆区(heap)中的值
final char value[] = {'a','b','c'};
value[1] = 'z';
打印一下value你会发现这个数组中的值是可以改变的。
但是string中我们无法获得它的char数组,所以无法改变它。
String类通过final修饰类,private final 修饰字段,达到了它的不可变更性。