Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Почему String неизменяемый???


Автор: bahus 20.5.2008, 11:27
Есть класс String и все знают что он неизменяемый. Он содержит в себе массив char который final, но это уже следствие неизменности.
Но зачем его сделали неизменяемым ???
Чтобы было удобней его использовать в качестве ключа ??
или еще может какие-нибудь варианты


Автор: VSergeyV 20.5.2008, 12:06
Цитата(bahus @  20.5.2008,  11:27 Найти цитируемый пост)
или еще может какие-нибудь варианты

Видимо оптимизация (экономия памяти, String Pool) и как следствие увеличение производительности

Цитата(bahus @  20.5.2008,  11:27 Найти цитируемый пост)
Есть класс String и все знают что он неизменяемый

есть еще StringBuffer и он изменяемый, поэтому я не сильно печалюсь о том что String неизменяемый smile 

Цитата(bahus @  20.5.2008,  11:27 Найти цитируемый пост)
Чтобы было удобней его использовать в качестве ключа ??

Какого ключа?

Автор: 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
А почему она должна быть изменяемой? smile

Нужна изменяемая строка, используй StringBuffer/StringBuilder.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)