Выбор ответа 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.
Варианты ответа
- HashMap не умеет хранить ключи Long и молча приводит их к Integer при вставке
1упаковывается в Integer, аInteger.equals(Long)всегда falseправильный ответ- Метод
getпринимает только примитив long, и1превращается в0L - Это ошибка компиляции, а не 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 ошибок.