Что выведет код 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 ошибок.