A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yueye13 中级黑马   /  2015-2-9 20:16  /  943 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.lang.*;
  2. import java.lang.reflect.*;
  3. import java.util.*;
  4. class ReflectTest2
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 Collection c=new HashSet();        //新建一个集合
  9.                
  10.                 //创建反射点对象,并传入参数
  11.                 ReflectPoint1 rp1=new ReflectPoint1(1,2);
  12.                 ReflectPoint1 rp2=new ReflectPoint1(3,4);
  13.                 ReflectPoint1 rp3=new ReflectPoint1(1,2);

  14.                 //将反射点中得到的元素添加到集合中
  15.                 c.add(rp1);
  16.                 c.add(rp2);
  17.                 c.add(rp3);
  18.                
  19.                 [color=Red]rp1.y=7;        //修改y的值之后,删除时就找不到原来的rp1,所以无法删除,此时就会出现内存泄露
  20.                 c.remove(rp1);        //删除元素[/color]
  21.                 System.out.println(c.size());
  22.                
  23.         }


  24. }
复制代码


对于上面,省略掉了反射点代码,打印长度还是2
先修改y的值,然后再删除集合元素,为什么就删不了rp1了呢,不是应该是修改了y的值之后,然后删除新的rp1吗?为什么删除的时候还是找的原来的rp1

1 个回复

倒序浏览
是不能修改参与 hashCode()算法的属性值,如果没有参与hashCode算法的话 你再改它也能删除, 至于你为什么能删除呢  你去看看你 反射点的hashcode算法里有没有用到Y
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马