相等大部分的人 都是知道 : == 号比较比较基本数据类型的值 或 两个对象的地址值。没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值。
但是重写过equals 方法的人 可能不多。
那么我们来看看 euqals的方法(来自Object类)的底层:
public boolean equals(Object obj) {
return (this == obj);
}
其实从底层可以看出还是调用了==比较。
先定义一个标准Bean. 不重写equals 方法
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student() {
}
public Student(int age) {
this.age = age;
}
测试类代码:
public class TestEquals {
public static void main(String[] args)throws Exception {
Student s1 = new Student(11);
Student s2 = new Student(11);
System.out.println(s1.equals(s2)); //输出结果是false
// 没重写的时候 比较的是地址值
}
}
重写equals 方法后的Bean
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student() {
}
public Student(int age) {
this.age = age;
}
//重写的euqals 方法
@Override
public boolean equals(Object obj) {
Student elseStudent= (Student) obj;
return this.age==elseStudent.age;
}
}
这时候 输出结果就是true了。