Веб-версияОткрыть в Telegram

Пост🤔 Чем полезны неизменяемые (Immutable) объекты в Java?

8 ноября 2025
J
Java | Вопросы собесов
🤔 Чем полезны неизменяемые (Immutable) объекты в Java? Неизменяемые (immutable) объекты не могут быть изменены после создания. Если нужно изменить данные – создаётся новый объект. 🚩Почему неизменяемые объекты полезны? 🟠Потокобезопасность (Thread Safety) Неизменяемые объекты можно безопасно использовать в многопоточной среде – их не нужно синхронизировать. String message = "Hello"; String newMessage = message.replace("H", "J"); System.out.println(message); // Hello System.out.println(newMessage); // Jello 🟠Отсутствие неожиданных изменений (безопасность данных) Если объект неизменяемый, его нельзя случайно изменить. class BankAccount { private final String accountNumber; public BankAccount(String accountNumber) { this.accountNumber = accountNumber; } public String getAccountNumber() { return accountNumber; } } 🟠Упрощает отладку и поддержку кода Изменяемые объекты могут менять состояние в неожиданный момент. List<String> list = new ArrayList<>(); list.add("Java"); modifyList(list); // Метод может изменить список! System.out.println(list); // Ожидаем ["Java"], но может быть что угодно! 🟠Можно использовать в качестве ключей в `HashMap` и `HashSet` Хешкод неизменяемого объекта не изменится, а значит, он корректно работает в HashMap. Map<String, String> map = new HashMap<>(); map.put("key", "value"); System.out.println(map.get("key")); // Всегда "value", так как String неизменяемый 🟠Совместимость с кэшем (например, в Hibernate, Spring) Неизменяемые объекты можно безопасно кешировать, так как они не меняются. 🚩Как создать неизменяемый класс? Все поля private final. Нет сеттеров. Если есть массивы или списки – копируем их перед возвратом. final class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } Ставь 👍 и забирай 📚 Базу знаний
18 · 2.3K ·

Рядом в ленте

JJava | Вопросы собесов🤔 Обеспечит ли Stream API RandomAcess? Нет, Stream API не поддерживает RandomAccess, потому что он работает с потоком данных, а не с индексированными структурамJJava | Вопросы собесов🤔 Как у класса заполнить атрибуты? Атрибуты класса (поля) можно заполнить: - через конструктор; - через сеттеры; - через аннотации Spring (@Autowired, @Value);
это сообщение
JJava | Вопросы собесов🤔 Как из одного сервлета вызвать другой сервлет? 1. С помощью объекта RequestDispatcher, вызвав его методы forward() или include(). 2. Через отправку запроса с JJava | Вопросы собесов🤔 Что такое Appender в log4j? Это компонент, который отвечает за отправку логов в различные места назначения, такие как файлы, консоль, базы данных, сетевые сок
JJava | Вопросы собесовJava | Вопросы собесов@easy_java_ru · канал · Технологии
11 337подписчиков1 093средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем