日期:2014-05-20  浏览次数:20714 次

求解:java集合中的引用问题
  以前,一直没有注意这个问题,今天我做了个测试,结果测试结果让我非常糊涂:代码如下:

Map<User, String> map = new HashMap<User, String>();
User user = new User();
user.userName = "name1";
user.pwd = "pwd1";
map.put(user, "u1");
System.out.println(map);
System.out.println("---------------------------");

user = new User();  ---②
user.userName = "name2";
user.pwd = "pwd2";
System.out.println(map);
map里面不是存进去的引用吗?为什么我执行 ② 这步操作,没有影响到 map 的key,难道map的key值存进去的是引用的副本吗???很不解,求大神解释一下啊!!

------解决方案--------------------
user这个对象指向的内存中一个地址,向map中添加之后就是map中的key指向了这个地址,同时user也指向它,但是当你给user赋值之后它指向的地址就改变了,但是map中的key所指的地址仍然是原来的那个,变的只是user,也就是说map的key存的是你添加时候让他指向的那个地址,而不是存的user,所以user变了,map中的key不变。
希望能帮到你