From f93ea70d700c4beebea50f705b4a1ad4eda5a609 Mon Sep 17 00:00:00 2001 From: xiaoleeza Date: Fri, 30 Aug 2019 10:34:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?a[I]=20=E6=94=B9=E4=B8=BA=20a[i]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/20. 接口优于抽象类.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/20. 接口优于抽象类.md b/docs/notes/20. 接口优于抽象类.md index daebfab..afb63f2 100644 --- a/docs/notes/20. 接口优于抽象类.md +++ b/docs/notes/20. 接口优于抽象类.md @@ -53,7 +53,7 @@ static List intArrayAsList(int[] a) { @Override public Integer set(int i, Integer val) { - int oldVal = a[I]; + int oldVal = a[i]; a[i] = val; // Auto-unboxing return oldVal; // Autoboxing } From 0bdcb4c65c9b285b6382aa786193ec5bbb3bcf73 Mon Sep 17 00:00:00 2001 From: xiaoleeza Date: Fri, 30 Aug 2019 13:37:48 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=A5=96=E6=AF=8D=20=E6=94=B9=E4=B8=BA=20?= =?UTF-8?q?=E5=AD=97=E6=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/40. 始终使用Override注解.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/40. 始终使用Override注解.md b/docs/notes/40. 始终使用Override注解.md index aba83c1..741f949 100644 --- a/docs/notes/40. 始终使用Override注解.md +++ b/docs/notes/40. 始终使用Override注解.md @@ -33,7 +33,7 @@ public class Bigram {   主程序重复添加二十六个双字母组合到集合中,每个双字母组合由两个相同的小写字母组成。 然后它会打印集合的大小。 你可能希望程序打印 26,因为集合不能包含重复项。 如果你尝试运行程序,你会发现它打印的不是 26,而是 260。它有什么问题? -  显然,`Bigram` 类的作者打算重写 `equals` 方法(详见第 10 条),甚至记得重写 `hashCode`(详见第 11 条)。 不幸的是,我们倒霉的程序员没有重写 `equals`,而是重载它(详见第 52 条)。 要重写 `Object.equals`,必须定义一个 `equals` 方法,其参数的类型为 `Object`,但 `Bigram` 的 `equals` 方法的参数不是 `Object` 类型的,因此 `Bigram` 继承 `Object` 的 `equals` 方法,这个 `equals` 方法测试对象的引用是否是同一个,就像 `==` 运算符一样。 每个祖母组合的 10 个副本中的每一个都与其他 9 个副本不同,所以它们被 `Object.equals` 视为不相等,这就解释了程序打印 260 的原因。 +  显然,`Bigram` 类的作者打算重写 `equals` 方法(详见第 10 条),甚至记得重写 `hashCode`(详见第 11 条)。 不幸的是,我们倒霉的程序员没有重写 `equals`,而是重载它(详见第 52 条)。 要重写 `Object.equals`,必须定义一个 `equals` 方法,其参数的类型为 `Object`,但 `Bigram` 的 `equals` 方法的参数不是 `Object` 类型的,因此 `Bigram` 继承 `Object` 的 `equals` 方法,这个 `equals` 方法测试对象的引用是否是同一个,就像 `==` 运算符一样。 每个字母组合的 10 个副本中的每一个都与其他 9 个副本不同,所以它们被 `Object.equals` 视为不相等,这就解释了程序打印 260 的原因。   幸运的是,编译器可以帮助你找到这个错误,但只有当你通过告诉它你打算重写 `Object.equals` 来帮助你。 要做到这一点,用 `@Override` 注解 `Bigram.equals` 方法,如下所示: