NOTE
Immutable Objects
Designing Java immutable objects and the concurrency benefits of stable state.
This is a historical learning note and may contain outdated or incomplete understanding.
An immutable object does not expose state changes after construction.
Typical practices are final/private state, no mutating methods, defensive copying of mutable inputs/outputs, and preventing subclass mutation where necessary. Records help express shallow immutable-style data carriers, but referenced mutable objects still need careful handling.
Immutability simplifies reasoning and sharing across threads. Correct construction/publication still matters, but callers do not need locks to protect later mutations that cannot occur.