6. 避免创建不必要的对象

This commit is contained in:
sjsdfg 2019-04-05 17:01:09 +08:00
parent 3b81147968
commit 1d1dfe51bb

View File

@ -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 实现上。 创建额外的对象以增强程序的清晰度,简单性或功能性通常是件好事。