Анализ сравнения строковых объектов по ссылкам

Метод выведет 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, не полагаться на случайное совпадение ссылок.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее