首页 > 技术文章 > equals方法

huaobin 2020-08-27 20:14 原文

判断两个对象是否相等;

基本数据类型:比较的是数值;

引用数据类型:比较的地址值

package day22;

import java.util.Objects;

public class person {
String name;
int age;

public person(String name, int age) {
this.name = name;
this.age = age;
}

/*对equals方法进行重写,使得可以比较两个对象是数值;

*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
person person = (person) o;
return age == person.age &&
Objects.equals(name, person.name);
/*Object方法容忍空指针;
其源代码如下
public static boolean equals(object a,object b)
{
boolean b=(a==b)||(a!=null&&a.equals(b));
return b;
}
*/
}

@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
package day22;

public class equlas {
public static void main(String[] args) {
person p1=new person("胡澳宾",18);
person p2=new person("张天爱",18);
boolean b=p1.equals(p2);
System.out.println(b);
}
}
注意事项:

equals 方法在非空对象引用上实现相等关系:

  • 自反性:对于任何非空引用值 xx.equals(x) 都应返回 true
  • 对称性:对于任何非空引用值 xy,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true
  • 传递性:对于任何非空引用值 xyz,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true
  • 一致性:对于任何非空引用值 xy,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
  • 对于任何非空引用值 xx.equals(null) 都应返回 false

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 xy,当且仅当 xy 引用同一个对象时,此方法才返回 truex == y 具有值 true)。

推荐阅读