为什么不可变字符串比可变字符串更有效

uve*_*eng 1 java string mutable

我在书中某处读到,不可变字符串可以比可变字符串更有效地实现。

与 Changeable 相比,Immutable String 如何更高效?

我的意思是不可变字符串和可变字符串之间的实现差异是什么,使不可变字符串更高效......?

Ach*_*Jha 5

在这里阅读。

可变对象和不可变对象都有自己的用途、优点和缺点。

在许多情况下,不可变对象确实让生活变得更简单。它们特别适用于值类型,其中对象没有标识,因此可以轻松替换。它们可以使并发编程方式更安全、更清晰(大多数众所周知的难以发现的并发错误最终都是由线程之间共享的可变状态引起的)。然而,对于大型和/或复杂的对象,为每个单独的更改创建对象的新副本可能非常昂贵和/或乏味。对于具有独特身份的对象,更改现有对象比创建新的修改后的对象要简单和直观得多。

考虑一个游戏角色。在游戏中,速度是重中之重,因此用可变对象表示游戏角色很可能会使您的游戏运行速度明显快于替代实现,在替代实现中,每次微小的变化都会生成游戏角色的新副本。

此外,我们对现实世界的感知不可避免地基于可变的对象。当您在加油站给汽车加满油时,您始终将其视为同一个对象(即,在其状态发生变化时保持其身份)——而不是像油箱空了的旧车被连续的新车取代一样汽车实例的油箱逐渐充满。因此,每当我们在程序中对某些现实世界的域进行建模时,使用可变对象来表示现实世界的实体来实现域模型通常会更直接、更容易。