Проверка равенства строк в Java

Вывод: x == y: true и x == z: false. Равные строковые литералы интернируются, а new String("a") создаёт отдельный объект с тем же содержимым.

Короткий ответ

Что ответить на собеседовании

Вывод: x == y: true и x == z: false. Равные строковые литералы интернируются, а new String("a") создаёт отдельный объект с тем же содержимым.

Подробный разбор

Ответ с пояснениями

Условие

Исследуйте, как оператор == работает при сравнении строковых объектов. Выясните, какие строки ссылаются на один и тот же объект в памяти, а какие — находятся в разных местах.

public class Test1 {
    public static void main(String[] args) {
        var x = "a";
        var y = "a";
        var z = new String("a");

        System.out.println("x == y: " + (x == y));
        System.out.println("x == z: " + (x == z));
    }
}

Ответ

Вывод: x == y: true и x == z: false. Равные строковые литералы интернируются, а new String("a") создаёт отдельный объект с тем же содержимым.

Оператор == проверяет идентичность объектов. Для сравнения текстовых значений используйте x.equals(z): результат true. Var не меняет семантику, он только выводит тип String. Адреса памяти в такой задаче не нужно угадывать: Java гарантирует наблюдаемое равенство ссылок, а физическое размещение и перемещение объектов находятся под управлением JVM.

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

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

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

Подробнее