mirror of
https://github.com/sjsdfg/effective-java-3rd-chinese.git
synced 2025-01-26 20:30:36 +08:00
update 6. 避免创建不必要的对象
This commit is contained in:
parent
3a1d61898e
commit
ab38697e35
@ -1,7 +1,7 @@
|
||||
# 6. 避免创建不必要的对象
|
||||
|
||||
|
||||
在每次需要时重用一个对象而不是创建一个新的相同功能对象通常是恰当的。重用可以更快更流行。如果对象是不可变的 (条目 17),它总是可以被重用。
|
||||
在每次需要时重用一个对象而不是创建一个新的相同功能对象通常是恰当的。重用可以更快更流行。如果对象是不可变的(条目 17),它总是可以被重用。
|
||||
|
||||
作为一个不应该这样做的极端例子,请考虑以下语句:
|
||||
|
||||
@ -16,11 +16,11 @@ String s = new String("bikini"); // DON'T DO THIS!
|
||||
String s = "bikini";
|
||||
```
|
||||
|
||||
该版本使用单个 String 实例,而不是每次执行时创建一个新实例。此外,它可以保证对象运行在同一虚拟机上的任何其他代码重用,而这些代码恰好包含相同的字符串字面量[JLS,3.10.5]。
|
||||
该版本使用单个 String 实例,而不是每次执行时创建一个新实例。此外,它可以保证对象运行在同一虚拟机上的任何其他代码重用,而这些代码恰好包含相同的字符串字面量[[JLS, 3.10.5]](https://docs.oracle.com/javase/specs/jls/se12/html/jls-3.html#jls-3.10.5)。
|
||||
|
||||
通过使用静态工厂方法(static factory methods, 条目 1),可以避免创建不需要的对象。例如,工厂方法 `Boolean.valueOf(String)` 比构造方法 `Boolean(String)` 更可取,后者在 Java 9 中被弃用。构造方法每次调用时都必须创建一个新对象,而工厂方法永远不需要这样做,在实践中也不需要。除了重用不可变对象,如果知道它们不会被修改,还可以重用可变对象。
|
||||
|
||||
一些对象的创建比其他对象的创建要昂贵得多。 如果要重复使用这样一个“昂贵的对象”,建议将其缓存起来以便重复使用。 不幸的是,当创建这样一个对象时并不总是很直观明显的。 假设你想写一个方法来确定一个字符串是否是一个有效的罗马数字。 以下是使用正则表达式完成此操作时最简单方法:
|
||||
一些对象的创建比其他对象的创建要昂贵得多。 如果要重复使用这样一个「昂贵的对象」,建议将其缓存起来以便重复使用。 不幸的是,当创建这样一个对象时并不总是很直观明显的。 假设你想写一个方法来确定一个字符串是否是一个有效的罗马数字。 以下是使用正则表达式完成此操作时最简单方法:
|
||||
|
||||
|
||||
```java
|
||||
|
Loading…
Reference in New Issue
Block a user