Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Почему String неизменяемый??? |
Автор: bahus 20.5.2008, 11:27 |
Есть класс String и все знают что он неизменяемый. Он содержит в себе массив char который final, но это уже следствие неизменности. Но зачем его сделали неизменяемым ??? Чтобы было удобней его использовать в качестве ключа ?? или еще может какие-нибудь варианты |
Автор: VSergeyV 20.5.2008, 12:06 |
Видимо оптимизация (экономия памяти, String Pool) и как следствие увеличение производительности есть еще StringBuffer и он изменяемый, поэтому я не сильно печалюсь о том что String неизменяемый ![]() Какого ключа? |
Автор: bahus 20.5.2008, 12:31 |
В качестве ключа например в HashMap, чтобы hashcode у объекта никогда не менялся. |
Автор: w38 20.5.2008, 12:33 |
на самом деле для безопасности, а по производительности это как раз добавляет много накладных расходов В учебниках приводится пример: диалог открытия файла 1)получает строку (ссылку на неё), 2)проверяет у SequrityManager права доступа к этому файлу, 3)убеждется, что всё нормально и 4)открывает этот файл. Теперь, если между третьим и четвертым шагом будет возможность изменить значение строки, вся система безопасности рушится как карточный домик. |
Автор: Shurr 20.5.2008, 14:42 |
w38 Достаточно спорный аргумент. Можно делать копию переданного в метод объекта-строки перед использованием, и тем самым исключить возможную опасность от изменения исходного объекта в другом потоке (насколько я понял - именно эта опасность имелась в виду). |
Автор: LSD 20.5.2008, 15:12 |
А почему она должна быть изменяемой? ![]() Нужна изменяемая строка, используй StringBuffer/StringBuilder. |