Skip to content

Commit 878067b

Browse files
committed
Update java基础知识总结.md
1 parent 9257f34 commit 878067b

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

docs/java/basis/java基础知识总结.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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
896896
abstract 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
968968
public class Address implements Cloneable{
@@ -1002,7 +1002,7 @@ Person person1Copy = person1.clone();
10021002
System.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();
10301030
System.out.println(person1.getAddress() == person1Copy.getAddress());
10311031
```
10321032

1033-
从输出结构就可以看出,虽然 `person1` 的克隆对象和 `person1` 包含的 `Address` 对象已经是不同的了。
1033+
从输出结构就可以看出,虽然 `person1` 的克隆对象和 `person1` 包含的 `Address` 对象已经是不同的了。
10341034

10351035
**那什么是引用拷贝呢?** 简单来说,引用拷贝就是两个不同的引用指向同一个对象。
10361036

0 commit comments

Comments
 (0)