Java HashMap盒装密钥类型autocast怪异

时间:2011-12-25 09:25:09

标签: java casting key hashmap

刚刚提到了Java HashMap的一个非常奇怪的行为。映射具有Long类型的键,但是当我通过int键访问它们时,没有自动转发,而get()方法返回null,就好像该键不存在一样!为什么Java在这种情况下没有从int到long的正确自动转换?

2 个答案:

答案 0 :(得分:2)

Map.get()和remove()接受任何对象。您的int被自动装箱到Integer

它不知道你要写的是map.get((Long) (long) intValue)还是map.get((long) intValue)

如果您使用的是基本类型而不是对象,则可以尝试将int转换为long(而不是包装器)的TLongObjectHashMap

答案 1 :(得分:1)

get method of the HashMap接受一个Object,无论泛型类型如何。背后的原因已在另一个Stackoverflow question中解释。

在您的情况下,int被自动装箱为Integer对象。但是,由于只有Long对象存储在地图中,因此找不到Integer对象的对象。由于get方法接受任何对象,因此无法知道int应该转换为Long。如果get方法只接受Long对象,则可能(!)不同。你必须自己施展。