From eabddb975193bf2b1fcee93c94c6166defe7ebe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=95=E5=BC=BA?= Date: Thu, 22 Aug 2019 13:36:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/06. 避免创建不必要的对象.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/06. 避免创建不必要的对象.md b/docs/notes/06. 避免创建不必要的对象.md index 040ff93..3013bc6 100644 --- a/docs/notes/06. 避免创建不必要的对象.md +++ b/docs/notes/06. 避免创建不必要的对象.md @@ -68,7 +68,7 @@ private static long sum() { } ``` -  这个程序的结果是正确的,但由于写错了一个字符,运行的结果要比实际慢很多。变量 `sum` 被声明成了 `Long` 而不是 `long`,这意味着程序构造了大约 231 不必要的 `Long` 实例(大约每次往 `Long` 类型的 `sum` 变量中增加一个 `long` 类型构造的实例),把 `sum` 变量的类型由 `Long` 改为 `long`,在我的机器上运行时间从 6.3 秒降低到 0.59 秒。这个教训很明显:**优先使用基本类型而不是装箱的基本类型,也要注意无意识的自动装箱。** +  这个程序的结果是正确的,但由于写错了一个字符,运行的结果要比实际慢很多。变量 `sum` 被声明成了 `Long` 而不是 `long`,这意味着程序构造了大约 231 不必要的 `Long` 实例(大约每次往 `Long` 类型的 `sum` 变量中增加一个 `long` 类型构造的实例),把 `sum` 变量的类型由 `Long` 改为 `long`,在我的机器上运行时间从 6.3 秒降低到 0.59 秒。这个教训很明显:**优先使用基本类型而不是装箱的基本类型,也要注意无意识的自动装箱。**   这个条目不应该被误解为暗示对象创建是昂贵的,应该避免创建对象。 相反,使用构造方法创建和回收小的对象是非常廉价,构造方法只会做很少的显示工作,尤其是在现代 JVM 实现上。 创建额外的对象以增强程序的清晰度,简单性或功能性通常是件好事。 From 69ee1d0ac20ad0e943f15ece626f249cfd0abb90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?i=E5=90=83=E7=93=9C?= <34263400+top37@users.noreply.github.com> Date: Thu, 22 Aug 2019 16:13:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Update=2010.=20=E9=87=8D=E5=86=99equals?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=97=B6=E9=81=B5=E5=AE=88=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E7=BA=A6=E5=AE=9A.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 字体加粗有效化 --- docs/notes/10. 重写equals方法时遵守通用约定.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/notes/10. 重写equals方法时遵守通用约定.md b/docs/notes/10. 重写equals方法时遵守通用约定.md index b06f0e9..c807d40 100644 --- a/docs/notes/10. 重写equals方法时遵守通用约定.md +++ b/docs/notes/10. 重写equals方法时遵守通用约定.md @@ -349,8 +349,8 @@ public final class PhoneNumber {   以下是一些最后提醒: 1. **当重写 equals 方法时,同时也要重写 hashCode 方法(详见第 11 条)**。 - 2. **不要让 equals 方法试图太聪明。**如果只是简单地测试用于相等的属性,那么要遵守 equals 约定并不困难。如果你在寻找相等方面过于激进,那么很容易陷入麻烦。一般来说,考虑到任何形式的别名通常是一个坏主意。例如,File 类不应该试图将引用的符号链接等同于同一文件对象。幸好 File 类并没这么做。 - 3. **在 equal 时方法声明中,不要将参数 Object 替换成其他类型。**对于程序员来说,编写一个看起来像这样的 equals 方法并不少见,然后花上几个小时苦苦思索为什么它不能正常工作:在 equal 时方法声明中,不要将参数 Object 替换成其他类型。对于程序员来说,编写一个看起来像这样的 equals 方法并不少见,然后花上几个小时苦苦思索为什么它不能正常工作。 + 2. **不要让 equals 方法试图太聪明。** 如果只是简单地测试用于相等的属性,那么要遵守 equals 约定并不困难。如果你在寻找相等方面过于激进,那么很容易陷入麻烦。一般来说,考虑到任何形式的别名通常是一个坏主意。例如,File 类不应该试图将引用的符号链接等同于同一文件对象。幸好 File 类并没这么做。 + 3. **在 equal 时方法声明中,不要将参数 Object 替换成其他类型。** 对于程序员来说,编写一个看起来像这样的 equals 方法并不少见,然后花上几个小时苦苦思索为什么它不能正常工作:在 equal 时方法声明中,不要将参数 Object 替换成其他类型。对于程序员来说,编写一个看起来像这样的 equals 方法并不少见,然后花上几个小时苦苦思索为什么它不能正常工作。 ```java // Broken - parameter type must be Object!