[英]Java HashMap boxed key type autocast weirdness
刚刚提到了Java HashMap的一个非常奇怪的行为。 映射具有Long
类型的键,但是当我通过int
键访问它们时,没有自动转发,而get()
方法返回null,就好像该键不存在一样! 为什么Java在这种情况下没有从int到long的正确自动转换?
Map.get()和remove()接受任何对象。 您的int
被自动装箱为Integer
它不知道你要写的是map.get((Long) (long) intValue)
还是map.get((long) intValue)
如果你使用原始类型而不是对象,你可以尝试TLongObjectHashMap,它将int
转换为long
(而不是包装器)
HashMap的get方法接受一个Object,而不管泛型类型如何。 其背后的原因已在另一个Stackoverflow问题中得到了解释。
在您的情况下,int将自动装箱到Integer对象。 但是,由于只有Long对象存储在地图中,因此找不到Integer对象的对象。 由于get方法接受任何对象,因此无法知道int应该转换为Long。 如果get方法只接受Long对象,则可能(!)不同。 你必须自己施展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.