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