刚刚提到了Java HashMap的一个非常奇怪的行为。映射具有Long
类型的键,但是当我通过int
键访问它们时,没有自动转发,而get()
方法返回null,就好像该键不存在一样!为什么Java在这种情况下没有从int到long的正确自动转换?
答案 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对象,则可能(!)不同。你必须自己施展。