equals作用
equals()的作用是用来判断两个对象是否相等
源码来源于 JDK 11.0.10
1 2 3 4
   |  public boolean equals(Object obj) {     return (this == obj); }
 
  | 
 
		因为equals()定义于 Object 类中,所以所有的 Java 类都会实现该方法。即所有的类都可以通过equals()对两个对象进行比较。在上述源码中可以看到,默认的equals()方法就是实现的 ==操作,即比较两个对象地址是否相同。
由此可将所有的 Java 类分为两类:
- 覆盖
equals()方法:用自定义的方法来判断两个对象是否相等。通常覆盖的选择为,判断两个对象的内容是否相等,如果相同返回 true ,否则,返回 false; 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | 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()方法:这里不覆盖方法,即执行==操作,判断两个对象是否为同一个对象。 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
   | 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()方法:根据自定义的覆盖规则进行判断两个对象是否相等,通常用于判断两个对象的内容是否相等。