Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > StringBuilder value in Map |
Автор: Escorial 17.12.2013, 18:01 |
Map<Integer, StringBuffer> map = new HashMap<Integer, StringBuffer>(); StringBuffer builder = new StringBuffer(); builder.append("some"); map.put(1, builder); builder.append("thing"); System.out.println(map.get(1)); В консоле выведется "something". Лично у меня вызвало это недоумение. Причина из-за того что в map мы ложим ссылку на обьект и таким образом вызывая map.get(1) мы получаем ни что иное как ссылку на этот же обьект который был изменен. Вопрос - как избавится от такого side эффекта (не клонируя обьект)? Пример взял из http://jeremymanson.blogspot.ru/2008/04/immutability-in-java.html. |
Автор: Stolzen 17.12.2013, 18:19 |
Никак, вы изменяете один и тот же объект, поэтому всегда будет side effect. Единственный выход - использовать клонирование. Еще можно использовать неизменяемые объекты (в данном случае String), тогда об этом задумываться не нужно будет. |
Автор: Escorial 17.12.2013, 18:26 |
Ясно. Спасибо. |