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 подскажет развёрнутый ответ в реальном времени.