Что такое строки (String) в Java и каковы их основные свойства?

«Что такое строки (String) в Java и каковы их основные свойства?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Класс java.lang.String представляет неизменяемую (immutable) последовательность символов.

Основные свойства и особенности:

  1. Неизменяемость (Immutability): Это фундаментальное свойство. После создания строку нельзя изменить. Все методы, которые кажутся изменяющими строку, на самом деле возвращают новый объект.

    String str = "Hello";
    str.concat(" World"); // Возвращает новую строку "Hello World"
    System.out.println(str); // Остается "Hello"
  2. String Pool: Специальная область в heap memory для хранения уникальных строковых литералов. Это оптимизация памяти.

    • Литералы ("text") интернируются (interned) и помещаются в пул.
    • new String("text") создает новый объект вне пула.
    • Метод intern() позволяет поместить строку в пул или получить ссылку на уже существующую там.
  3. Сравнение строк:

    • == — проверяет, ссылаются ли переменные на один и тот же объект в памяти.
    • .equals(Object obj) — сравнивает символьное содержимое строк.
  4. Важные методы: length(), isEmpty(), charAt(int index), equals(), compareTo(), substring(), contains(), replace(), split(), toCharArray().

Почему строки неизменяемы? Это обеспечивает безопасность (например, при использовании в качестве ключа в HashMap), потокобезопасность (не требуется синхронизация) и позволяет использовать String Pool.

Для конкатенации или интенсивного изменения используйте StringBuilder (не потокобезопасный) или StringBuffer (потокобезопасный).