Mediumstringimmutable

Почему String immutable в Java?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

String immutable по нескольким причинам: String Pool (изменение одной строки в pool затронуло бы все ссылки), thread-safety без синхронизации, security (class loading, пути, URL нельзя подменить после проверки), кэширование hashCode (вычисляется один раз). Класс final, поле final byte[] value.

String s = "abc";
s.concat("def");   // возвращает НОВУЮ строку, s остаётся "abc"
s = s.concat("def"); // теперь s = "abcdef"
  • Mutable альтернативы — StringBuilder (не synchronized) и StringBuffer (synchronized);
  • С Java 9 compact strings: byte[] с coder (LATIN1 или UTF16) — экономит память;
  • Подстроки (substring до Java 7u6) разделяли массив — экономия памяти.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.