Объекты каких классов являются иммутабельными

«Объекты каких классов являются иммутабельными» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Иммутабельными в Java являются объекты классов, состояние которых нельзя изменить после создания. Примеры:

  • String — после создания строку нельзя изменить (методы типа substring() возвращают новую строку)
  • Классы-обёртки (Integer, Double, Boolean и т.д.)
  • LocalDate, LocalTime, ZonedDateTime из пакета java.time
  • BigInteger, BigDecimal
  • Коллекции из Collections.unmodifiableXXX()

Пример иммутабельного класса:

public final class ImmutablePoint {
    private final int x;
    private final int y;

    public ImmutablePoint(int x, int y) {
        this.x = x;
        this.y = y;
    }
    // Только геттеры, нет сеттеров
}