LearningNotes icon indicating copy to clipboard operation
LearningNotes copied to clipboard

该文章中Set<Person>中对象的属性变了之后,还是3个对象,并不像文章说的那样变成了4个

Open andyhaha opened this issue 9 years ago • 1 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); } }

把这段代码全部copy出来,亲自测试运行,打印的结果都是3个!

andyhaha avatar Sep 25 '16 01:09 andyhaha

person没有重写hashcode和equals方法吧

Guolei1130 avatar Dec 27 '16 16:12 Guolei1130