@@ -879,7 +879,7 @@ public final class String implements java.io.Serializable, Comparable<String>, C
879879}
880880```
881881
882- > 🐛修正 : 我们知道被 ` final ` 关键字修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象。因此,` final ` 关键字修饰的数组保存字符串并不是 ` String ` 不可变的根本原因,因为这个数组保存的字符串是可变的(` final ` 修饰引用类型变量的情况)。
882+ > 🐛 修正 : 我们知道被 ` final ` 关键字修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象。因此,` final ` 关键字修饰的数组保存字符串并不是 ` String ` 不可变的根本原因,因为这个数组保存的字符串是可变的(` final ` 修饰引用类型变量的情况)。
883883>
884884> ` String ` 真正不可变有下面几点原因:
885885>
@@ -890,7 +890,7 @@ public final class String implements java.io.Serializable, Comparable<String>, C
890890>
891891> 补充(来自[ issue 675] ( https://github.com/Snailclimb/JavaGuide/issues/675 ) ):在 Java 9 之后,String 、` StringBuilder ` 与 ` StringBuffer ` 的实现改用 byte 数组存储字符串 ` private final byte[] value `
892892
893- ` StringBuilder ` 与 ` StringBuffer ` 都继承自 ` AbstractStringBuilder ` 类,在 ` AbstractStringBuilder ` 中也是使用字符数组保存字符串,不过没有使用 ` final ` 和 ` private ` 关键字修饰,最关键的是这个 ` AbstractStringBuilder ` 类还提供了很多修改字符串的方法比如 ` append ` 方法。
893+ ` StringBuilder ` 与 ` StringBuffer ` 都继承自 ` AbstractStringBuilder ` 类,在 ` AbstractStringBuilder ` 中也是使用字符数组保存字符串,不过没有使用 ` final ` 和 ` private ` 关键字修饰,最关键的是这个 ` AbstractStringBuilder ` 类还提供了很多修改字符串的方法比如 ` append ` 方法。
894894
895895``` java
896896abstract class AbstractStringBuilder implements Appendable , CharSequence {
@@ -903,7 +903,7 @@ abstract class AbstractStringBuilder implements Appendable, CharSequence {
903903 str. getChars(0 , len, value, count);
904904 count += len;
905905 return this ;
906- }
906+ }
907907 // ...
908908}
909909```
@@ -962,7 +962,7 @@ protected void finalize() throws Throwable { }//实例被垃圾回收器回收
962962
963963浅拷贝的示例代码如下,我们这里实现了 ` Cloneable ` 接口,并重写了 ` clone() ` 方法。
964964
965- ` clone() ` 方法的实现很简单,直接调用的是父类 ` Object ` 的 ` clone() ` 方法。
965+ ` clone() ` 方法的实现很简单,直接调用的是父类 ` Object ` 的 ` clone() ` 方法。
966966
967967``` java
968968public class Address implements Cloneable {
@@ -1002,7 +1002,7 @@ Person person1Copy = person1.clone();
10021002System . out. println(person1. getAddress() == person1Copy. getAddress());
10031003```
10041004
1005- 从输出结构就可以看出, ` person1 ` 的克隆对象和 ` person1 ` 使用的仍然是同一个 ` Address ` 对象。
1005+ 从输出结构就可以看出, ` person1 ` 的克隆对象和 ` person1 ` 使用的仍然是同一个 ` Address ` 对象。
10061006
10071007** 深拷贝**
10081008
@@ -1030,7 +1030,7 @@ Person person1Copy = person1.clone();
10301030System . out. println(person1. getAddress() == person1Copy. getAddress());
10311031```
10321032
1033- 从输出结构就可以看出,虽然 ` person1 ` 的克隆对象和 ` person1 ` 包含的 ` Address ` 对象已经是不同的了。
1033+ 从输出结构就可以看出,虽然 ` person1 ` 的克隆对象和 ` person1 ` 包含的 ` Address ` 对象已经是不同的了。
10341034
10351035** 那什么是引用拷贝呢?** 简单来说,引用拷贝就是两个不同的引用指向同一个对象。
10361036
0 commit comments