Каков результат сравнения через equals() для строк, созданных как new String(» «) и » » в Java?

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

Ответ

Результат будет true.

Причина: Метод String.equals() сравнивает последовательности символов (содержимое) строк, а не ссылки на объекты. Поскольку содержимое обоих строк одинаково, equals() возвращает true.

String s1 = new String("hello"); // Новый объект в куче (heap)
String s2 = "hello";             // Литерал, может быть взят из пула строк
System.out.println(s1.equals(s2)); // true — сравнивается содержимое "hello"

Ключевое различие в создании объектов:

  • new String("hello") — всегда создает новый объект String в куче, даже если такая строка уже есть в пуле.
  • "hello" — литерал. JVM сначала ищет строку в пуле строк, и если находит, возвращает существующую ссылку; если нет — создает новую в пуле.

Сравнение через == даст false, так как это сравнение ссылок на разные объекты в памяти.