重写equals方法
来源:互联网 发布:上古世纪精灵捏脸数据 编辑:程序博客网 时间:2024/06/10 05:04
用途
涉及到两个对象的比较的时候,一般需要重写equals方法。
示例
package equals;public class Person { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } //重写equals方法 @Override public boolean equals(Object obj) { //判断是否为同一对象 if (this == obj) return true; //判断是否为空 if (obj == null) return false; //判断是否属于同一个类 if (getClass() != obj.getClass()) return false; //如果类型相同,比较内容 Person other = (Person) obj; if (age == null) { if (other.age != null) return false; } else if (!age.equals(other.age)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } //重写hashcode @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((age == null) ? 0 : age.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; }}
这里要注意的是重写equals方法一定要重写hashcode方法。因为散列码(hashcode)是由对象导出的一个整数值,它是没有规律的。每个对象基本上对应唯一的一个散列码。因此重写equals与hashcode定义必须一致:如果a.equals(b)返回true,那么a.hashcode()和b.hashcode()必须具有相同的值。
另一种写法
//重写equals方法 @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; return Objects.equals(age, other.age)&&Objects.equals(name, other.name); } //重写hashcode @Override public int hashCode() { return Objects.hash(name,age); }
equals比较内容的时,直接调用Objects的equals的方法来比较,
返回hashcode时调用Objects的hash方法来组合散列码。这两个方法的实现原理可以直接查看源码,也不复杂,有兴趣的同学可以去看看。
1 0
- 重写equals方法时都要重写equals方法
- 重写equals()方法
- 重写equals()方法
- JAVA重写equals方法
- JAVA重写equals方法
- 重写Equals()方法
- equals方法重写
- 重写 equals 方法
- java 重写equals方法
- 重写equals()方法简介
- 重写equals方法
- 重写equals方法
- 重写equals方法
- 重写equals方法
- 怎么样重写equals方法
- 重写Equals方法
- 重写equals方法
- 重写equals方法
- Linux文件读写与缓存
- 学习编程的秘诀
- 赋值语句的返回值为永真?
- 程序员面试金典--面试27之有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数
- 威佐夫博弈
- 重写equals方法
- 自定义ArrayList集合
- 六道JS面试题
- RecyclerView异常BUG
- 影响软件性能的因素
- 【图像处理中的数学修炼】一书之代码
- 如何在大学学习英语
- 如何利用git由本机向github上传文件
- 中国剩余定理(余数定理)Chinese remainder