Вывод: true, false, true, true. Оператор == сравнивает ссылки, а String.equals — последовательность символов, поэтому отдельный объект third равен первым по содержимому.
Различия между оператором == и методом equals() при сравнении строк в Java
Вывод: true, false, true, true. Оператор == сравнивает ссылки, а String.equals — последовательность символов, поэтому отдельный объект third равен первым по содержимому.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В данном примере рассматривается, как работают оператор == и метод equals() при проверке равенства строк в Java.
String first = "123";
String second = "123";
String third = new String("123");
System.out.println(first == second);
System.out.println(first == third);
System.out.println(first.equals(second));
System.out.println(first.equals(third));
Ответ
Вывод: true, false, true, true. Оператор == сравнивает ссылки, а String.equals — последовательность символов, поэтому отдельный объект third равен первым по содержимому.
First и second получают один интернированный литерал "123". New String("123") создаёт другой объект, несмотря на тот же текст. Поэтому first == third ложно, но first.equals(third) истинно. Для пользовательских строк используют equals; если любая ссылка может быть null, удобно Objects.equals(first, third). Нельзя переносить совпадение ссылок строковых литералов на любые строки, пришедшие из файла или сети.