我今天读了《有效的Java》一章。本章是关于最小化对象的可变性。我很理解为什么不可变对象是好的,例如线程安全,简单等。我的问题是,由于不可变对象有很多优点,在任何情况下都倾向于使用可变对象吗?

最佳答案

当将类从状态A转换为状态Z时,您将需要可变的类来处理情况,这会产生许多中间对象,而您不希望花费时间来创建它们。

一个经典的例子是连接一个字符串数组。假设您需要连接100个字符串,并产生一个结果。没有可变的字符串,您将需要产生98个中间对象,这些对象几乎可以立即进行垃圾回收。这在CPU上相当浪费,因此使可变对象成为正确的解决方案。

还有其他情况需要可变对象。例如,将可变对象传递给方法可让您收集多个结果,而无需跳过太多的语法箍。另一个示例是排序和过滤:当然,您可以创建一个采用原始集合并返回已排序集合的方法,但是这对于较大的集合将变得非常浪费。

08-03 17:27
查看更多