Исследование сравнения строк оператором ==

Вывод будет: s1 == s2: true и s1 == s3: false. Литералы используют одну строку из пула; выражение new String создаёт другой объект с тем же текстом.

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

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

Вывод будет: s1 == s2: true и s1 == s3: false. Литералы используют одну строку из пула; выражение new String создаёт другой объект с тем же текстом.

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

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

Условие

Определите, какой текст появится в стандартном выводе при выполнении следующей программы.

public class Test1 {
    public static void main(String[] args) {
        var s1 = "a";
        var s2 = "a";
        var s3 = new String("a");

        System.out.println("s1 == s2: " + (s1 == s2));
        System.out.println("s1 == s3: " + (s1 == s3));
    }
}

Ответ

Вывод будет: s1 == s2: true и s1 == s3: false. Литералы используют одну строку из пула; выражение new String создаёт другой объект с тем же текстом.

s1 == s2: true
s1 == s3: false

Var влияет только на вывод типа локальной переменной, не на семантику строк. Для всех трёх значений equals сравнил бы одинаковое содержимое и дал true. Оператор == у ссылок проверяет, один ли это объект, поэтому для прикладного сравнения строк его использовать не следует.

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

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

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

Подробнее