Java_hashCode()以及equals()方法浅谈
2017-02-15 09:54
423 查看
我们都知道,对于同一个对象类型的两个引用判断是否相等。一般采取两种方法判断。一种是用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的原理,我想说,这个原理什么链表,你解释半天不如不解释,还不如来点直接明了的。索性,自己通过打印 然后写下自己的感悟。本人小白,不喜勿喷!
@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的原理,我想说,这个原理什么链表,你解释半天不如不解释,还不如来点直接明了的。索性,自己通过打印 然后写下自己的感悟。本人小白,不喜勿喷!
相关文章推荐
- Java 中equal() 方法与==的区别以及 equals()与 hashCode()方法重写
- java中hashCode方法与equals方法以及contains方法的用法总结
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- java中的equals和hashCode方法以及集合的排序
- 浅谈java中==以及equals方法的用法
- java中的equals和hashCode方法以及两种方法集合的排序
- 浅谈“==”、equals和hashcode,以及map的遍历方法(可用作上一篇k-means博文参考)
- 浅谈HashMap以及重写hashCode()和equals()方法
- 为什么要重写java中对象的equals方法和hashCode方法以及如何重写
- java重写equals方法以及hashcode方法
- 浅谈Java中的hashcode和equals方法
- JAVA重写equals方法以及hashCode方法
- java 重写HashCode和equals方法以及 HashMap集合 增 删 改 查
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
- 关于重写equals,hashcode以及compareTo方法!
- java中的hashcode()和equals()方法详解
- 关于重写equals,hashcode以及compareTo方法
- Java中的equals方法与hashCode方法解析
- 深入java 的equals方法和hashCode方法