From 88c3e48a532d09d6381f16bcb2faed332aceec62 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Sun, 23 Dec 2018 15:21:40 +0800 Subject: [PATCH] docs(notes): update basic-java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新 Java String 类描述。 --- docs/notes/Java 基础.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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 值**