null будет возвращено, если ключ, по которому производится поиск, не является тем же самым объектом (имеет то же самое ссылочное равенство), который был использован при вставке элемента.
Причина в том, что HashMap для определения "равенства" ключей использует комбинацию hashCode() и equals(). Если эти методы не переопределены, используются реализации из Object.
Object.hashCode() обычно возвращает значение, основанное на адресе объекта в памяти, то есть уникальное для каждого экземпляра.Object.equals() просто проверяет ссылочное равенство (this == obj).Таким образом, чтобы HashMap.get() нашел элемент при использовании непереопределенных equals и hashCode, должны совпасть оба условия:
Object.hashCode()) должны быть равны, что очень маловероятно для разных объектов.Object.equals()), то есть это должен быть один и тот же экземпляр объекта.Если вы помещаете объект в HashMap, а затем пытаетесь получить его, используя другой объект с теми же значениями полей (но не тот же самый экземпляр), hashCode и equals по умолчанию будут расценивать их как разные, и get() вернет null.