String字符串类

内容存储形式

JDK1.8:字符数组 private final char[] value;

JDK1.9:字节数组 private final byte[] value;

不可变性

定义

  • 字符串对象一旦创建,对象内部的字符内容就不能被修改。所有对字符串的修改操作,都会生成新的 String 对象,原对象保持不变。

实现原理

  1. String 类被 final 修饰:避免子类重写方法篡改字符串内容;保证所有使用 String 的地方行为统一。如果可以继承,子类可以覆写方法对外返回修改后的字符,破坏不可变语义。
  2. 存储字符的 value[] 被 private修饰:禁止外部直接拿到字符数组引用。如果不是 private,外部拿到数组引用后,可以通过value[0]='X' 修改数组元素。
  3. 存储字符的 value[] 被 final修饰:保证 value 引用不能指向另一个新数组。阻止类似代码:this.value = new char[0];
  4. 没有对外提供修改 value[] 的 API:不提供能够修改 value 数组的方法。