Метод выведет true, затем false. Два литерала "a" ссылаются на одну интернированную строку, а new String("a") создаёт отдельный объект.
Анализ сравнения строковых объектов по ссылкам
Метод выведет true, затем false. Два литерала "a" ссылаются на одну интернированную строку, а new String("a") создаёт отдельный объект.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В данном примере рассматривается метод, который демонстрирует особенности сравнения строк в Java через оператор ==. Метод выводит результаты сравнения ссылок разных строковых переменных, чтобы показать, как работает пул строк (String pool) и создание новых объектов.
private static void stringPool() {
String first = "a";
String second = "a";
String third = new String("a");
System.out.println(first == second);
System.out.println(first == third);
}
Ответ
Метод выведет true, затем false. Два литерала "a" ссылаются на одну интернированную строку, а new String("a") создаёт отдельный объект.
Оператор == сравнивает идентичность объектов, а не содержимое. Поэтому first.equals(third) вернул бы true. Вызов third.intern() возвращает каноническую строку из пула и сравнение first == third.intern() также дало бы true. Для проверки текста нужно использовать equals или Objects.equals при возможном null, не полагаться на случайное совпадение ссылок.