An immutable object is an object whose state cannot be modified after it is initiated. This quality of immutable objects is essential in multi-threaded applications because it allows a thread to act on the data represented by immutable objects without worrying about changes from other threads. In addition, immutability provides lots of benefits, such as referential transparency and low coupling, which we will talk about in upcoming sections.
An object is considered immutable if the object itself, and in fact all of its properties, are immutable. In some cases, an object is considered immutable even if some of its internal properties change but the object's state appears to be immutable from an external point of view. For instance, an object that uses the memoization technique to cache the results of resource-greedy calculations can be considered as an immutable object.
Immutable objects have the following features:
- They are simple to construct, test, and use
- They are simple to understand...