Вывод будет: 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. Оператор == у ссылок проверяет, один ли это объект, поэтому для прикладного сравнения строк его использовать не следует.