黑马程序员技术交流社区
标题:
关于hashCode的正确理解
[打印本页]
作者:
思维
时间:
2014-8-21 14:43
标题:
关于hashCode的正确理解
本帖最后由 思维 于 2014-8-25 22:53 编辑
今天写了一段代码,结果返回均为false,哪个大神可以帮忙分析下结果
class PersonDemo{
public static void main(String[] args) {
Person p1 = new Person(1);
Person p2 = new Person(1);
Person p3 = new Person(2);
System.out.println(p1==p2);
System.out.println(p1==p3);
}
}
class Person{
private int age;
Person(int age){
this.age=age;
}
public int hashCode(){
return 1;
}
}
复制代码
作者:
陈君
时间:
2014-8-21 14:58
当然都是错啦。因为==其实就是调用了object中的equals方法。而object中的equals方法里面就是对地址进行判断,如果是地址相同则是同一个对象。你在person类中覆盖了hashCode方法。首先你要明白。在它还没被复写的时候hashCode的功能是什么。它是找到对象的地址址然后进行一个哈希运算,运算出一个hashCode然后返回出来。现在你覆盖后。它的功能是所有的hashCode值都是1。而不会去考虑地址再进行运算。
其实有一点你要想清楚。无论覆盖前还是覆盖后,hashCode方法都影响不了地址值。其实想想也知道,系统是不可能让你在同一个内存里面放多个数据的。
作者:
思维
时间:
2014-8-21 15:08
陈君 发表于 2014-8-21 14:58
当然都是错啦。因为==其实就是调用了object中的equals方法。而object中的equals方法里面就是对地址进行判断 ...
果然十分的精辟啊!:) 通过hashCode联想到了Object类,由此产生了一个疑问:创建一个类一般都要复写哪些方法,实现哪些类啊?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2