В Java есть несколько стандартных классов, объекты которых являются неизменяемыми (immutable). Неизменяемость означает, что после создания объекта его состояние не может быть изменено. Любые операции, которые кажутся модификацией объекта, фактически создают новый объект с измененным состоянием. Вот несколько примеров неизменяемых классов в Java:
java.lang.String
: Строки в Java являются неизменяемыми. Все операции, которые кажутся модификацией строки, создают новую строку.java
String str = "Hello"; str = str.concat(", World!"); // Новая строка создается
java.math.BigInteger
: Класс BigInteger
представляет неограниченно длинные целые числа и является неизменяемым.
java
BigInteger bigInteger1 = new BigInteger("12345678901234567890"); BigInteger bigInteger2 = bigInteger1.add(new BigInteger("1")); // Новый объект BigInteger создается
java.time.*
(новые классы времени в пакете java.time
): Многие классы для работы с временем в новом API времени также являются неизменяемыми.
java
LocalDate date = LocalDate.now(); LocalDate tomorrow = date.plusDays(1); // Новый объект LocalDate создается
java.lang.Integer
, java.lang.Double
, и другие оболочечные классы: Оболочечные классы для примитивных типов данных также являются неизменяемыми.
java
Integer num = 42; num = num + 1; // Новый объект Integer создается
java.awt.Color
: Объекты класса Color
из пакета java.awt
тоже являются неизменяемыми.
java
Color red = new Color(255, 0, 0); Color brighterRed = red.brighter(); // Новый объект Color создается
Эти классы предоставляют преимущества, такие как безопасность потоков и предсказуемое поведение в многопоточных сценариях, а также удобство использования в различных контекстах.