一、介绍
equals方法是object的一个方法,本来是判断是否是同一个对象的,若是则返回true,不是则返回false。子类一般会重写该方法,功能一般改为判断两个对象的内容是否相同,当然也可以根据程序员的需求灵活重写该方法。
二、示例
1.jdk中类的重写
1)String
public boolean equals(Object anObject) {
//判断是否是同一个对象
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) { //字符串长度是否相等
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) { //依次遍历比较,只有有一个元素不同则返回false
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
2)Interger
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
2.自定义重写
public class equals_ {
public static void main(String[] args) {
Employee zhang = new Employee("小张", 18);
Employee wang = new Employee("小张",18);
System.out.println(zhang == wang); //比较引用类型,为false
System.out.println(zhang.equals(wang)); //比较内容,为true
}
}
class Employee{
private String name;
private int age;
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int hashCode() {
return 200;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object obj) {
//对象是否是同一个
if (this == obj) {
return true;
}
if(obj instanceof Employee) {
Employee st = (Employee) obj; //向下转型,为了使obj能得到Employee的字段,从而进行比较
return ((st.age == this.age) && (st.name == this.name));
}
return false;
}
}
运行结果:
false
true