JavaRush /Курсы /Java Multithreading /Что такое mutable/immutable объекты и зачем они

Что такое mutable/immutable объекты и зачем они

Java Multithreading
2 уровень , 1 лекция
Открыта
Что такое mutable/immutable объекты и зачем они - 1

— Привет, Амиго!

— Привет, Билаабо!

— Сегодня Билаабо расскажет тебе о mutable и immutable объектах.

Объекты, которые после создания можно изменить, называются изменяемыми или mutable.

Объекты, которые после их создания изменить нельзя, называются неизменяемыми или immutable.

— А от чего зависит, можно объект менять или нет?

— Человек, который пишет новый класс, может сделать объекты этого класса неизменяемыми. Например, можно скрыть все setter’ы — у объекта будет только конструктор и getter’ы, а, значит, после создания объекта поменять его уже будет нельзя.

— И какая от этого польза?

— У неизменяемых объектов много полезных свойств. Но можно выделить два, которые характерны практически для всех immutable-объектов:

1) Неизменяемые объекты можно реализовать значительно проще, чем изменяемые.

2) Неизменяемые объекты можно свободно использовать одновременно из разных нитей.

Чаще всего, когда разработчик решает написать immutable класс, он делает две версии этого класса — mutable и immutable.

— А в чем смысл писать два класса вместо одного?

— Иногда так выгоднее, когда неизменяемая версия объекта будет гораздо проще/быстрее чем изменяемая. Тогда и делают две версии. Это почти как ArrayList и LinkedList: оба — списки, но один оптимизирован для одних целей, второй — для других.

— Уже понятнее.

— Бывают также и чисто immutable классы, без их mutable версии.

— А если мне нужно что-то поменять в таком объекте? Что вообще можно сделать с неизменяемым объектом?

— Обычно immutable классы содержат различные методы, которые «как бы» меняют объект, но вместо изменения самого объекта эти методы просто создают новый объект и возвращают его.

Вот тебе несколько примеров:

Код на Java Описание
String s = "moscow";
String s2 = s.toUpperCase();
В результате s содержит строку «moscow», а s2 — «MOSCOW»
Integer i = 1;
Integer j = i;
j++;
Вот что происходит на самом деле:
Integer i = new Integer(1);
Integer j = i;
j = new Integer(i.getInt()+1);

Класс String — это immutable класс. Все объекты типа String — неизменяемые, что, однако, не мешает нам с ними работать. Например, метод toUpperCase() класса String преобразовывает строку в верхний регистр (заменяет все маленькие буквы на большие). Но этот метод не меняет саму строку, а возвращает новую строку, которая идентична первой, только все символы в верхнем регистре (большие).

Класс Integer — это тоже immutable класс. Все объекты типа Integer — неизменяемые. Каждый раз, когда мы изменяем объект Integer, на самом деле создается новый объект.

— Как интересно. Ура, Билаабо.

— Ура мне, ура Билаабо!

Комментарии (78)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Sanek 2й заход Уровень 38
24 ноября 2024
Ура, Билаабо
4el0vek3 Уровень 36
19 августа 2025
ура
No Name Уровень 36
21 ноября 2024
+ лекция в копилке
Anemon Уровень 13 Expert
19 ноября 2024
Ура, Билаабо.
Максим Li Уровень 40
18 мая 2024
18.05.2024
Ислам Уровень 33
27 февраля 2024
Nice
JavaRusher853 Уровень 36
9 сентября 2024
Изыди с чата, нечесть.
Юрій Якимчук Уровень 33
14 февраля 2024
Годы страданий в предыдущих лекциях и наконец-то чето интересное
Dmitry Shaburov Уровень 33
29 ноября 2023
29.11.2023
dim11981 Уровень 47
10 октября 2023
"темной стороне рефлексии не поддаться ты должен"
Captin Уровень 39
10 сентября 2023
Сегодня Балабол расскажет тебе о mutable и immutable объектах.
Vitaliy Уровень 34
23 августа 2023
Для тех кому еще не понятно что такое mutable/immutable Mutable and Immutable in Java