判断两个对象是否相等;
基本数据类型:比较的是数值;
引用数据类型:比较的地址值
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
方法在非空对象引用上实现相等关系:
- 自反性:对于任何非空引用值
x
,x.equals(x)
都应返回true
。 - 对称性:对于任何非空引用值
x
和y
,当且仅当y.equals(x)
返回true
时,x.equals(y)
才应返回true
。 - 传递性:对于任何非空引用值
x
、y
和z
,如果x.equals(y)
返回true
,并且y.equals(z)
返回true
,那么x.equals(z)
应返回true
。 - 一致性:对于任何非空引用值
x
和y
,多次调用 x.equals(y) 始终返回true
或始终返回false
,前提是对象上equals
比较中所用的信息没有被修改。 - 对于任何非空引用值
x
,x.equals(null)
都应返回false
。
Object
类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x
和 y
,当且仅当 x
和 y
引用同一个对象时,此方法才返回 true
(x == y
具有值 true
)。