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

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

Ответ

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

Причина: Оператор == в Java сравнивает ссылки (адреса в памяти), а не содержимое строк.

  • Строковый литерал " " хранится в пуле строк (String Pool).
  • Выражение new String(" ") создает новый объект String в куче (heap), даже если идентичная строка уже есть в пуле.

Эти две переменные будут указывать на два разных объекта, поэтому == возвращает false.

String literal = "text";      // Ссылка на объект в String Pool
String newString = new String("text"); // Ссылка на новый объект в heap

System.out.println(literal == newString); // false — разные объекты
System.out.println(literal.equals(newString)); // true — одинаковое содержимое

Правило: Для сравнения строк по значению всегда используйте equals(). Оператор == используйте только когда нужно проверить, являются ли две переменные ссылкой на один и тот же объект (что редко требуется для строк).