繁体   English   中英

Java HashMap盒装密钥类型autocast怪异

[英]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 (而不是包装器)

HashMapget方法接受一个Object,而不管泛型类型如何。 其背后的原因已在另一个Stackoverflow问题中得到了解释。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM