本帖最后由 夏诗瑶 于 2012-10-4 18:49 编辑
首先你得明白覆写的原因:
//覆写hashCode方法的原因。Object中的hashCode是本地(windows)方法,只算内存地址. //不覆写会根据内存地址判断资料相同的人不是同一个人。 //满足不了人的姓名和年龄相同 既为同一个人的要求。所以要依据对象自身特别不同。 //覆写equals的原因:HashSet判断元素唯一的依据是自动调用equals方法。 //不覆写的话,如果hash值万一相同的话,就需要逐个比较元素的属性,而原来的equals满足不了这个要求
// 符合条件返回true(为同一个对象) 不符合返回false(不是同一个对象)
return this.name.equals(mon.name) && (this.age == mon.age);
这两句话,比如你开始添加了一个 对象("monkey1",25); 当你再添加一个对象("monkey1",25); 的时候,
首先根据你自己覆写的hascode方法判断出 两个hascode值相同,这时就要通过equals方法来判断了。
this代表后面一个monkey1对象。mon.name其实是之前传递的每一个对象(hascode相同的对象)。
也就是说,当你每添加一个对象时,当hascode值相等时,系统都会跟以前的进行比较,从而区分你添加的到底是不是同一个对象! |