黑马程序员技术交流社区

标题: hashcode与equals鉴定2个对象是否相等的区别? [打印本页]

作者: 草上飞    时间: 2012-10-23 20:08
标题: hashcode与equals鉴定2个对象是否相等的区别?
请各位大侠帮帮忙,我对这个问题困了很久了?谢谢各位了
作者: sixth    时间: 2012-10-23 20:42
equals()方法在Object类中的实现是通过==操作符来实现的,也就是说,如果子类不重写该方法的时候,那么这个类的对象比较的时候,是比较地址的(==的作用)
而Object类中的hashCode()方法会针对不同的对象返回不同的整数,通常这个整数是通过将该对象的内部地址转换成一个整数来实现的。
我个人认为他们两个在不重写的情况下都是根据地址来判断对象是否相等的。
个人见解,楼下的别喷!

作者: 崔政    时间: 2012-10-23 21:17
首先比较来hashcode,如果hashcode相同,再比较equals。
如果hashcode()比较相同,那么equals一定相同。
Object中的equals方法
pubic boolean equals(Object obj){
        return (this==obj);
}
这是对两个对象的地址值比较。
当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。
复写以后,比较的方式就发生改变。
equals()相等的两个对象,hashcode()一定相等;  equals()不相等的两个对象,
却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。
:hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2