Что выведет код Middle Задачи на Java обновлено
Что выведет: сравнение значений из коллекций
Вопрос
Что выведет программа (Java 21)? Каждый вывод println с новой строки.
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, Integer> a = new HashMap<>(), b = new HashMap<>();
a.put("x", 100); b.put("x", 100);
a.put("y", 1000); b.put("y", 1000);
System.out.println(a.get("x") == b.get("x"));
System.out.println(a.get("y") == b.get("y"));
System.out.println(a.get("y").equals(b.get("y")));
System.out.println((int) a.get("y") == b.get("y"));
}
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: true, false, true, true. Значения в карте хранятся как Integer.
Что выведет
true
false
true
true
Разбор
Значения в карте хранятся как Integer. 100 берётся из кеша Integer.valueOf, это один объект: true. 1000 упаковано дважды в разные объекты, == сравнивает ссылки: false. equals сравнивает значения. Если хотя бы одна сторона примитив, вторая распаковывается и сравниваются числа. Классический баг: решение проходит маленькие тесты и падает на больших.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.