次のコードを参照してください。
public static void main (String[] args) {
Map<Number, String> map = new HashMap<Number, String>();
map.put(1L, "test");
System.out.println(map.get(1));
}
HashMap.get が null を返すのはなぜですか? O_o hashCode 関数が 1 を返すオブジェクトは必ず値を返さなければなりませんね。
更新しました
問題は、Map インターフェイスがパラメーター化された型ではなくオブジェクトを受け取ることです。なので、どんなオブジェクトでもキーにできると思っていたのですが、 HashMap 実装のチェック型が equals だったのは意外でした。
また、オートボクシングは問題ではありません。1 は Integer になり、1L は Long になりました。しかし、それらは同じハッシュコードを持っています。したがって、実装 Map#get は、同じハッシュコードを持つオブジェクトの値を返す必要があると考えていました。