francistao/LearningNotes

Android内存泄漏问题

DeanLXY opened this issue · 3 comments

public static void main(String[] args)
{
Set<Person> set = new HashSet<Person>();
Person p1 = new Person("唐僧","pwd1",25);
Person p2 = new Person("孙悟空","pwd2",26);
Person p3 = new Person("猪八戒","pwd3",27);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素!
p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变

set.remove(p3); //此时remove不掉,造成内存泄漏

set.add(p3); //重新添加,居然添加成功
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素!
for (Person person : set)
{
System.out.println(person);
}
}

这个例子中修改属性值,后从集合中移除,文档标注为不能移除。实际是可以移除的,亲测
正确方式为

p3 = new Person("","","");
set.remove(p3);//此时无法移除

楼主很用心的总结了,希望能修改这个小瑕疵

确实,开始看楼主的觉得有点意思,仔细一想却想不明白,后来测试发现楼主说错了。
确实可以移除的,楼主赶紧修改不然害人不浅。哈哈

的确可以移除,修改类的成员变量不会改变hashCode值,除非重写hashCode才会出现不能移除的问题

附议