8.2. Using Immutable Classes  Immutable classes behave
differently from reference classes both in terms of their
abstract behaviour (value semantics) and in terms of their
implementation.  To begin with, immutable classes cannot suffer
from aliasing problems, since they are immutable. You can get
the same effect with reference classes by not providing any
modifying operations in the interface - any operation that would
modify the object, returns a new object instead. For example,
take a look at the STR class  Immutable classes may have several
efficiency advantages over reference classes in certain
circumstances. Since they are usually stored on the stack, they
have no heap management overhead and need not be garbage
collected. They also don't use space to store a tag, and the
absence of aliasing makes more C compiler optimizations
possible. For a small class like CPX, all these factors combine
to give a significant win over a reference class implementation.
On the other hand, copying large immutable objects