![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
bahus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
Есть класс String и все знают что он неизменяемый. Он содержит в себе массив char который final, но это уже следствие неизменности.
Но зачем его сделали неизменяемым ??? Чтобы было удобней его использовать в качестве ключа ?? или еще может какие-нибудь варианты |
|||
|
||||
VSergeyV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 299 Регистрация: 9.5.2006 Где: Новосибирск Репутация: нет Всего: 3 |
Видимо оптимизация (экономия памяти, String Pool) и как следствие увеличение производительности есть еще StringBuffer и он изменяемый, поэтому я не сильно печалюсь о том что String неизменяемый ![]() Какого ключа? Это сообщение отредактировал(а) VSergeyV - 20.5.2008, 12:36 |
|||
|
||||
bahus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
В качестве ключа например в HashMap, чтобы hashcode у объекта никогда не менялся.
|
|||
|
||||
w38 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.12.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
на самом деле для безопасности, а по производительности это как раз добавляет много накладных расходов
В учебниках приводится пример: диалог открытия файла 1)получает строку (ссылку на неё), 2)проверяет у SequrityManager права доступа к этому файлу, 3)убеждется, что всё нормально и 4)открывает этот файл. Теперь, если между третьим и четвертым шагом будет возможность изменить значение строки, вся система безопасности рушится как карточный домик. |
|||
|
||||
Shurr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 24.10.2006 Репутация: 5 Всего: 7 |
w38
Достаточно спорный аргумент. Можно делать копию переданного в метод объекта-строки перед использованием, и тем самым исключить возможную опасность от изменения исходного объекта в другом потоке (насколько я понял - именно эта опасность имелась в виду). |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А почему она должна быть изменяемой?
![]() Нужна изменяемая строка, используй StringBuffer/StringBuilder. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |