java 集合类中的 map.get() 方法返回指定键所映射的值。如果此映射不包含该键的映射关系,则返回 null。

语法:

get(object key))

参数说明:

key:是指定的 map 集合中的键名。

典型应用

本示例使用 hashmap 类创建 map 集合对象,并向集合中添加指定的内容,然后使用 get 方法获取指定键名的键值对象。代码如下:

运行结果如下:
在map集合中键名apple的键值是: 新鲜的苹果

java中map的get方法key值类型的一个问题

描述: 在hashmap中取值的时候,key值是0,用hashmap.get(0),却无论如何也取不到value,调试的时候仔细一看,key值的类型是long型,然后传0l,即顺利取到值了。  

分析:

代码大概就是上面这个样子。

在调用get方法的时候,会进入

如果key值是0l(long),那么进入get方法的时候,入参key值依然是0(long),那么很顺利的会在getentry方法体内,通过相关的hash和比较操作(具体也比较简单,不是重点不多说)返回预期的value值。

但是,如果key值是图中的0(integer),那么get方法被调用时的入参就很奇怪了,如下:

正如图中调试信息一样,key值为java/lang/integer$integercache,integer内部的一个私有类,缓存-127~128的数据(这个也不是重点),重点是这个方法不知道被谁调用了两次,而且key值都是这个值,直到第三次的时候,key值为0(integer),当然了,即使这样也自然找不到预期的value值了,因为在getentry方法内,进行equals时,毕竟是integer类型,是和key值比较不上的。

现在想不明白的是,这个get方法前两次被谁调用的,希望哪位大佬知道,留个言解释下。

我用javap命令查看了下,并没有弄明白(主要是小弟道行太浅):

另外,我觉得可能key值是0的原因,然后用3000作为key值(put,get)试了下,结果还是这样。

然后,我将代码改成这样:

就不会出现上面截图的情况,第一次进入get方法(也只进入一次),key值就是0(integer)。

然后猜测了下可能和integer的缓存有关,这样试了下:

断点打在第二次get方法时,这时候,进入get方法体内时,key值就是预期的0(integer),当然,这是为什么,我还是不明白。

希望知道原因的前辈可以解答下,若日后搞明白了,我再来解释。

到此这篇关于java map.get()返回指定键所映射的值的文章就介绍到这了,更多相关java map.get返回值内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!