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

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

Открыта
Что такое 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, 23:36
Ура, Билаабо
4el0vek3
Уровень 40
19 августа 2025, 12:05
ура
C0N5P1RACY QA Automation Engineer
12 февраля, 19:16
ура ура Биллабо
Ruslan Gabzalilov
Уровень 27
21 апреля, 08:33
Ураа Билаабо!!! Ура товарищи!
No Name
Уровень 22
21 ноября 2024, 14:39
+ лекция в копилке
Anemon
Уровень 13
Expert
19 ноября 2024, 03:55
Ура, Билаабо.
Максим Li Backend Developer
18 мая 2024, 17:20
18.05.2024
Ислам
Уровень 33
27 февраля 2024, 00:04
Nice
JavaRusher853
Уровень 36
9 сентября 2024, 20:31
Изыди с чата, нечесть.
Юрій Якимчук
Уровень 33
14 февраля 2024, 09:49
Годы страданий в предыдущих лекциях и наконец-то чето интересное
Dmitry Shaburov
Уровень 33
29 ноября 2023, 01:42
29.11.2023
hidden #3327891
Уровень 47
10 октября 2023, 15:57
"темной стороне рефлексии не поддаться ты должен"
Captin
Уровень 39
10 сентября 2023, 11:05
Сегодня Балабол расскажет тебе о mutable и immutable объектах.
Vitaliy
Уровень 34
23 августа 2023, 17:14
Для тех кому еще не понятно что такое mutable/immutable Mutable and Immutable in Java