Utilidade de objetos imutáveis quando o estado de um programa muda constantemente
Eu sei que objetos imutáveis sempre têm o mesmo estado, o estado em que eles são realmente criados. Seus invariantes são estabelecidos pelo construtor e desde que seu estado não muda após a construção, esses invariantes sempre se mantêm bem e é por isso que eles são seguros para publicar em um ambiente multi thread. Tudo bem, mas como vivemos em um mundo dinâmico, onde o estado do programa muda continuamente, que benefícios esses objetos nos proporcionam se construímos o estado de nosso programa através de objetos imutáveis?