HashMap<Integer,String> map = new HashMap<>();
Integer key = new Integer(1);
String value = "hashmap";
map.put(key,value);
System.out.println(map); //{1=hashmap}
key = null;
System.gc();
System.out.println(map); //{1=hashmap}
HashMap<Integer,String> map = new HashMap<>();
Integer key = new Integer(1);
String value = "hashmap";
map.put(key,value);
System.out.println(map); //{1=hashmap}
key = null;
System.gc();
System.out.println(map); //{1=hashmap}
简单解释一下:
所谓对象,可以分为引用和数据两部分,引用和数据之间就像是遥控和电视机;
无论电视机里面节目怎么切换,遥控还是一样的操作控制,即数据变化不影响引用关系;
但是,假如你换台电视机,或者换个遥控,那就跟原先情况完全不同了,这种情况属于,引用替换或者数据替换,是全新的对应关系。
Map中key的作用相当于引用,value相当于数据
你替换了key整体,它无法反映到Map中去,所以跟原先就不是一回事了
就好像一个人只要灵魂还在,无论变成什么样,他还是他,但要是灵魂也丢了,那就与本来的他失去了联系
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
你把key这个引用赋值为null, 并不意味着
Hashmap
里的key也是null.你要区分变量引用和内存对象的关系。
new Integer(1);
生成一个对象, 假设内存地址是0x87654321
, jvm把这个内存地址给了key,map.put(key,value);
时, map里增加了个键值对,键是0x87654321
,值是"hashmap"。注意:键不是kye变量本身!key=null
, 是把key这个变量指向空, 但map里的键值对不受影响。