Является ли String в Java объектом?

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

Ответ

Да, String в Java — это полноценный объект (экземпляр класса java.lang.String), который хранится в куче (heap).

Ключевые особенности объекта String:

  1. Неизменяемость (Immutability): Объект String нельзя изменить после создания. Любая операция, модифицирующая строку (например, concat(), substring(), toUpperCase()), возвращает новый объект String.

    String s1 = "Hello";
    String s2 = s1.concat(" World"); // Создается новый объект
    System.out.println(s1); // "Hello" (исходный объект не изменился)
    System.out.println(s2); // "Hello World"
  2. String Pool (пул строк): Механизм оптимизации памяти. Строковые литералы и строки, созданные с помощью метода intern(), хранятся в специальной области heap — пуле строк. Это позволяет повторно использовать существующие объекты.

    String a = "literal"; // Создается в пуле (если еще нет)
    String b = "literal"; // Переиспользует объект из пула
    String c = new String("literal"); // Создает новый объект в куче
    System.out.println(a == b); // true (один и тот же объект из пула)
    System.out.println(a == c); // false (разные объекты)
    System.out.println(a.equals(c)); // true (одинаковое содержимое)
  3. Для изменяемых строк используйте классы StringBuilder (не потокобезопасный, быстрее) или StringBuffer (потокобезопасный).