根据论坛讨论总结,以下代码会出现内存泄漏
import java.util.HashMap;
import java.util.Map;
public class HashMapOver {
public static void main(String[] args) {
Map<Person, Integer> map = new HashMap<Person, Integer>();
Person p = new Person("zhangsan", 12);
map.put(p, 1);
p.setName("lisi"); // 因为p.name参与了hash值的计算,修改了之后hash值发生了变化,所以下面删除不掉
map.remove(p);
System.out.println(map.size());
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
@Override
public int hashCode() {
return name.hashCode() * 123;
}
}
下面是运行结果--->
-116701252
408606369
1
运行结果的hash值改变了啊!删的是原来的hash值所指向的对象,但是hash值改变了,删不了。