Читайте здесь.
Как изменяемые, так и неизменяемые объекты имеют свои особенности использования, плюсы и минусы.
Неизменяемые объекты действительно во многих случаях упрощают жизнь. Они особенно применимы для типов значений, где объекты не имеют идентификатора, поэтому их можно легко заменить. И они могут сделать параллельное программирование более безопасным и чистым (большинство общеизвестно трудно обнаруживаемых ошибок параллелизма в конечном итоге вызваны изменяемым состоянием, разделяемым между потоками). Однако для больших и/или сложных объектов создание новой копии объекта для каждого отдельного изменения может быть очень дорогостоящим и/или утомительным. А для объектов с отличной идентичностью изменить существующий объект гораздо проще и интуитивно понятнее, чем создать его новую измененную копию.
Подумайте об игровом персонаже. В играх скорость является главным приоритетом, поэтому представление ваших игровых персонажей с помощью изменяемых объектов, скорее всего, заставит вашу игру работать значительно быстрее, чем альтернативная реализация, в которой новая копия игрового персонажа создается для каждого небольшого изменения.
Более того, наше восприятие реального мира неизбежно основано на изменчивых объектах. Когда вы заправляете свой автомобиль топливом на заправке, вы все время воспринимаете его как один и тот же объект (т. е. его идентичность сохраняется при изменении его состояния), а не как если бы старый автомобиль с пустым баком последовательно заменялся новым. автомобильные экземпляры, у которых их бак постепенно становится все более и более полным. Таким образом, всякий раз, когда мы моделируем какую-либо предметную область в программе, обычно проще реализовать модель предметной области, используя изменяемые объекты для представления сущностей реального мира.
person
Achintya Jha
schedule
24.05.2014