equals作用
equals()
的作用是用来判断两个对象是否相等
源码来源于 JDK 11.0.10
public boolean equals(Object obj) { return (this == obj); }
|
因为equals()
定义于 Object 类中,所以所有的 Java 类都会实现该方法。即所有的类都可以通过equals()
对两个对象进行比较。在上述源码中可以看到,默认的equals()
方法就是实现的 ==
操作,即比较两个对象地址是否相同。
由此可将所有的 Java 类分为两类:
- 覆盖
equals()
方法:用自定义的方法来判断两个对象是否相等。通常覆盖的选择为,判断两个对象的内容是否相等,如果相同返回 true ,否则,返回 false;
public class Test01 { public static void main(String[] args) { Student s1 = new Student("Tom", 10); Student s2 = new Student("Tom", 10); System.out.println(s1.equals(s2)); }
static class Student { private String name; private int age;
public Student(String name, int age) { this.name = name; this.age = age; }
public String toString() { return name + " " + age; } } }
|
- 不覆盖
equals()
方法:这里不覆盖方法,即执行==
操作,判断两个对象是否为同一个对象。
public class Test01 { public static void main(String[] args) { Student s1 = new Student("Tom", 10); Student s2 = new Student("Tom", 10); System.out.println(s1.equals(s2)); }
static class Student { private String name; private int age;
public Student(String name, int age) { this.name = name; this.age = age; }
public String toString() { return name + " " + age; }
@Override public boolean equals(Object obj) { if (obj == null) { return false; }
if (this == obj) { return true; }
if (this.getClass() != obj.getClass()) { return false; }
Student stu = (Student) obj; return name.equals(stu.name) && age == obj.age; } } }
|
总结
==
与 equals()
区别:
- 前者是判断两个对象的地址是否相等(两个对象是否为同一个对象);
- 后者分为两种情况:
- 不覆盖
equals()
方法:等价于 ==
- 覆盖
equals()
方法:根据自定义的覆盖规则进行判断两个对象是否相等,通常用于判断两个对象的内容是否相等。