В чем преимущество неизменности строки

Однажды я узнал о преимуществе неизменяемости строки из-за чего-то, что улучшает производительность в памяти.

Кто-нибудь может мне это объяснить? Я не могу найти его в Интернете.

20
задан Lipis 30 January 2013 в 18:33
поделиться

3 ответа

Неизменяемость (для строк или других типов) может иметь множество преимуществ:

  • Это упрощает рассуждение о коде, поскольку вы можете делать предположения о переменных и аргументах, которые вы не можете в противном случае сделайте.
  • Это упрощает многопоточное программирование, поскольку чтение из типа, который не может изменить, всегда безопасно выполнять одновременно.
  • Это позволяет уменьшить использование памяти, позволяя объединять идентичные значения и ссылаться на них из разных мест. И Java, и C # выполняют интернирование строк, чтобы уменьшить затраты памяти на литеральные строки, встроенные в код.
  • Это упрощает разработку и реализацию определенных алгоритмов (например, алгоритмов, использующих отслеживание с возвратом или разделение пространства значений), поскольку ранее вычисленное состояние можно повторно использовать позже.
  • Неизменяемость является основополагающим принципом во многих языках функционального программирования - она ​​позволяет рассматривать код как серию преобразований от одного представления к другому, а не как последовательность мутаций.

Неизменяемые строки также помогают избежать соблазна использовать строки в качестве буферов. Многие дефекты в программах на C / C ++ связаны с проблемами переполнения буфера, возникающими в результате использования массивов незащищенных символов для составления или изменения строковых значений. Рассмотрение строк как изменяемых типов поощряет использование типов, более подходящих для работы с буфером (см. StringBuilder в .NET или Java).

34
ответ дан 29 November 2019 в 23:22
поделиться

Рассмотрим альтернативу. В Java нет квалификатора const. Если бы объекты String были изменяемыми, то любой метод, которому вы передаете ссылку на строку, мог бы иметь побочный эффект изменения строки. Неизменяемые строки устраняют необходимость в защитных копиях и снижают риск ошибки программы.

9
ответ дан 29 November 2019 в 23:22
поделиться

Неизменяемые строки копировать дешево, потому что вам не нужно копировать все данные - просто скопируйте ссылку или указатель на данные.

С неизменяемыми классами любого типа легче работать в нескольких потоках, единственная необходимая синхронизация - это их уничтожение.

5
ответ дан 29 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: