Среди предложенных классов в вопросе, только java.lang.String является неизменяемым (immutable) в языке программирования Java.
Неизменяемость означает, что состояние объекта не может быть изменено после создания. В классе java.lang.String любые операции, которые даже кажутся изменяющими строку, на самом деле создают новый объект String. Оригинальная строка остается нетронутой.
Например, когда мы конкатенируем две строки:
String firstString = "Привет";
firstString += ", мир!";
Вторая строка не изменяет firstString - вместо этого она создает новую строку, которая является результатом конкатенации. Несмотря на то, что firstString теперь ссылается на новую строку, исходная строка "Привет" остается нетронутой в памяти.
Неизменяемость класса String не случайна - она приносит несколько важных преимуществ:
String неизменяем, его хэш-код также неизменен, что позволяет эффективно использовать строки в качестве ключей в HashMap и других структурах данных, использующих хэширование.В Java java.lang.String является неизменяемым классом, что делает его прочным, безопасным и удобным для использования во многих контекстах. Подобные классы StringBuilder и StringBuffer представляют собой изменяемые альтернативы, каждая из которых имеет свои преимущества в определенных ситуациях. Изучение различий и лучших практик использования этих классов является важным аспектом работы с Java.