Java_hashCode()以及equals()方法浅谈

来源:互联网 发布:手机淘宝 朋友代付 编辑:程序博客网 时间:2024/06/05 07:01

我们都知道,对于同一个对象类型的两个引用判断是否相等。一般采取两种方法判断。一种是用a==b?这种方式判断出来的是对象在堆内存中的地址,另外一种就是调用类的equals这个方法,因为所有自定义的类都是Object类的子类,所以没有复写父类的方法,默认就会调用Object中的equals方法。但是Object中的方法,看了API后知道,也是在判断是否两个对象的堆内存地址相同。假如现在一个学生类,两个对象的姓名和年龄都是一样的,我们一般认为他就是同一个对象,而不是去考虑是不是同一个堆内存的引用。这时候我们去复写equals方法。如下

@Override
public boolean equals(Object obj) {

if(this==obj){

return true;

}

if(obj instanceof A){

A a = (A)obj;

return  this.age==a.age&&this.name.equals(a.name);

}else{

return false;

}

}

以前就是判断两个对象是否相等。下面我们来介绍一下hashcode()方法的使用场景

在HashMap中存放键值对,都是根据键的哈希值去存放的,当我们存放的键是一个对象,每次存放都会去调用hashcode这个方法,根据哈希值去存放,每个数据的位置。当我们查询时,就会去调用hashcode()方法,如果哈希值不同则判断不同,如果哈希值相同,则继续去判断对象的equals()方法。如下,

@Override
public int hashCode() {

int result = 17;

return result*31+age+name.hashCode();

}


刚才看了好多博客,都是说hashcode的原理,我想说,这个原理什么链表,你解释半天不如不解释,还不如来点直接明了的。索性,自己通过打印 然后写下自己的感悟。本人小白,不喜勿喷!



0 0
原创粉丝点击