Why can’t strings be mutable in Java and .NET?

According to Effective Java, chapter 4, page 73, 2nd edition:

“There are many good reasons for this: Immutable classes are easier to
design, implement, and use than mutable classes. They are less prone
to error and are more secure.

[…]

Immutable objects are simple. An immutable object can be in
exactly one state, the state in which it was created. If you make sure
that all constructors establish class invariants, then it is
guaranteed that these invariants will remain true for all time, with
no effort on your part.

[…]

Immutable objects are inherently thread-safe; they require no synchronization. They cannot be corrupted by multiple threads
accessing them concurrently. This is far and away the easiest approach
to achieving thread safety. In fact, no thread can ever observe any
effect of another thread on an immutable object. Therefore,
immutable objects can be shared freely

[…]

Other small points from the same chapter:

Not only can you share immutable objects, but you can share their internals.

[…]

Immutable objects make great building blocks for other objects, whether mutable or immutable.

[…]

The only real disadvantage of immutable classes is that they require a separate object for each distinct value.

Leave a Comment