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

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

Ответ

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

Причина: В Java строковые литералы (значения в двойных кавычках) интернируются (interned) и помещаются в пул строк (String Pool). При создании второго идентичного литерала " " JVM возвращает ссылку на уже существующий объект из пула.

String s1 = " "; // Создается или находится строка в пуле
String s2 = " "; // Возвращается ссылка на ту же строку из пула
System.out.println(s1 == s2); // true, потому что s1 и s2 — одна ссылка

Важное замечание: Это поведение гарантировано только для литералов и строк, явно помещенных в пул методом intern(). Для сравнения содержимого строк всегда следует использовать метод equals().

System.out.println(s1.equals(s2)); // true, и это корректный способ сравнения