Каковы ключевые особенности строк (String) в Java?

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

Ответ

Основная особенность строк в Java — их неизменяемость (immutability). После создания объект String не может быть изменен. Это обеспечивает:

  • Безопасность: Строки можно безопасно передавать между потоками.
  • Кеширование: JVM использует String Pool для хранения литералов, что экономит память.
  • Хеширование: Хеш-код строки вычисляется один раз и кешируется, что полезно для коллекций вроде HashMap.

Пример, демонстрирующий String Pool и неизменяемость:

String s1 = "hello"; // Литерал — попадает в String Pool.
String s2 = "hello"; // Возвращает ссылку на тот же объект из пула.
String s3 = new String("hello"); // Явное создание нового объекта в куче.
String s4 = s1.toUpperCase(); // Создается НОВЫЙ объект "HELLO".

System.out.println(s1 == s2); // true (одна ссылка из пула).
System.out.println(s1 == s3); // false (разные объекты).
System.out.println(s1.equals(s3)); // true (одинаковое содержимое).

Практические следствия:

  • Конкатенация (+) в циклах создает много промежуточных объектов. Для эффективной сборки строк используйте StringBuilder или StringBuffer.
  • Методы типа substring(), trim(), replace() возвращают новые строки, не изменяя исходную.
  • Класс String реализует интерфейсы CharSequence, Comparable<String>, Serializable.