diff --git a/docs/notes/Java 基础.md b/docs/notes/Java 基础.md index 63998c7d..85acabf5 100644 --- a/docs/notes/Java 基础.md +++ b/docs/notes/Java 基础.md @@ -148,15 +148,31 @@ System.out.println(m == n); // true String 被声明为 final,因此它不可被继承。 -内部使用 char 数组存储数据,该数组被声明为 final,这意味着 value 数组初始化之后就不能再引用其它数组。并且 String 内部没有改变 value 数组的方法,因此可以保证 String 不可变。 +在 Java 8 中,String 内部使用 char 数组存储数据。 ```java public final class String implements java.io.Serializable, Comparable, CharSequence { /** The value is used for character storage. */ private final char value[]; +} ``` +在 Java 9 之后,String 类的实现改用 byte 数组存储字符串,同时使用 `coder` 来标识使用了哪种编码。 + +```java +public final class String + implements java.io.Serializable, Comparable, CharSequence { + /** The value is used for character storage. */ + private final byte[] value; + + /** The identifier of the encoding used to encode the bytes in {@code value}. */ + private final byte coder; +} +``` + +value 数组被声明为 final,这意味着 value 数组初始化之后就不能再引用其它数组。并且 String 内部没有改变 value 数组的方法,因此可以保证 String 不可变。 + ## 不可变的好处 **1. 可以缓存 hash 值**