Выбор ответа Senior Основы: типы, обёртки, static обновлено

Ключ Long и get(int)

Вопрос

Почему Map<Long, String> m с ключом 1L возвращает null на m.get(1)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 1 упаковывается в Integer, а Integer.equals(Long) всегда false. Map.get принимает Object, поэтому компилятор молча упакует int в Integer.

Варианты ответа

  1. HashMap не умеет хранить ключи Long и молча приводит их к Integer при вставке
  2. 1 упаковывается в Integer, а Integer.equals(Long) всегда falseправильный ответ
  3. Метод get принимает только примитив long, и 1 превращается в 0L
  4. Это ошибка компиляции, а не null: get(1) не подходит к Map<Long, String>

Разбор

Map.get принимает Object, поэтому компилятор молча упакует int в Integer. Хеши Integer(1) и Long(1) совпадают, но Long.equals требует Long, и ключ не находится. Компиляция проходит, IDE лишь предупредит. HashMap хранит Long без всякого приведения. Правильно m.get(1L).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.