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