@@ -879,7 +879,7 @@ public final class String implements java.io.Serializable, Comparable<String>, C
879
879
}
880
880
```
881
881
882
- > 🐛修正 : 我们知道被 ` final ` 关键字修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象。因此,` final ` 关键字修饰的数组保存字符串并不是 ` String ` 不可变的根本原因,因为这个数组保存的字符串是可变的(` final ` 修饰引用类型变量的情况)。
882
+ > 🐛 修正 : 我们知道被 ` final ` 关键字修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象。因此,` final ` 关键字修饰的数组保存字符串并不是 ` String ` 不可变的根本原因,因为这个数组保存的字符串是可变的(` final ` 修饰引用类型变量的情况)。
883
883
>
884
884
> ` String ` 真正不可变有下面几点原因:
885
885
>
@@ -890,7 +890,7 @@ public final class String implements java.io.Serializable, Comparable<String>, C
890
890
>
891
891
> 补充(来自[ issue 675] ( https://github.com/Snailclimb/JavaGuide/issues/675 ) ):在 Java 9 之后,String 、` StringBuilder ` 与 ` StringBuffer ` 的实现改用 byte 数组存储字符串 ` private final byte[] value `
892
892
893
- ` StringBuilder ` 与 ` StringBuffer ` 都继承自 ` AbstractStringBuilder ` 类,在 ` AbstractStringBuilder ` 中也是使用字符数组保存字符串,不过没有使用 ` final ` 和 ` private ` 关键字修饰,最关键的是这个 ` AbstractStringBuilder ` 类还提供了很多修改字符串的方法比如 ` append ` 方法。
893
+ ` StringBuilder ` 与 ` StringBuffer ` 都继承自 ` AbstractStringBuilder ` 类,在 ` AbstractStringBuilder ` 中也是使用字符数组保存字符串,不过没有使用 ` final ` 和 ` private ` 关键字修饰,最关键的是这个 ` AbstractStringBuilder ` 类还提供了很多修改字符串的方法比如 ` append ` 方法。
894
894
895
895
``` java
896
896
abstract class AbstractStringBuilder implements Appendable , CharSequence {
@@ -903,7 +903,7 @@ abstract class AbstractStringBuilder implements Appendable, CharSequence {
903
903
str. getChars(0 , len, value, count);
904
904
count += len;
905
905
return this ;
906
- }
906
+ }
907
907
// ...
908
908
}
909
909
```
@@ -962,7 +962,7 @@ protected void finalize() throws Throwable { }//实例被垃圾回收器回收
962
962
963
963
浅拷贝的示例代码如下,我们这里实现了 ` Cloneable ` 接口,并重写了 ` clone() ` 方法。
964
964
965
- ` clone() ` 方法的实现很简单,直接调用的是父类 ` Object ` 的 ` clone() ` 方法。
965
+ ` clone() ` 方法的实现很简单,直接调用的是父类 ` Object ` 的 ` clone() ` 方法。
966
966
967
967
``` java
968
968
public class Address implements Cloneable {
@@ -1002,7 +1002,7 @@ Person person1Copy = person1.clone();
1002
1002
System . out. println(person1. getAddress() == person1Copy. getAddress());
1003
1003
```
1004
1004
1005
- 从输出结构就可以看出, ` person1 ` 的克隆对象和 ` person1 ` 使用的仍然是同一个 ` Address ` 对象。
1005
+ 从输出结构就可以看出, ` person1 ` 的克隆对象和 ` person1 ` 使用的仍然是同一个 ` Address ` 对象。
1006
1006
1007
1007
** 深拷贝**
1008
1008
@@ -1030,7 +1030,7 @@ Person person1Copy = person1.clone();
1030
1030
System . out. println(person1. getAddress() == person1Copy. getAddress());
1031
1031
```
1032
1032
1033
- 从输出结构就可以看出,虽然 ` person1 ` 的克隆对象和 ` person1 ` 包含的 ` Address ` 对象已经是不同的了。
1033
+ 从输出结构就可以看出,虽然 ` person1 ` 的克隆对象和 ` person1 ` 包含的 ` Address ` 对象已经是不同的了。
1034
1034
1035
1035
** 那什么是引用拷贝呢?** 简单来说,引用拷贝就是两个不同的引用指向同一个对象。
1036
1036
0 commit comments