- Object 中的 equals() 是直接判断 this 和 obj 本身的值是否相等
- 可以重写父类中的 equals() 比较两个对象成员属性值是否相等
Student.java
- package com.api.Demo05;
-
- public class Student {
- private String name;
- private int age;
-
- public Student() {
- super();
- }
-
- public Student(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;
- }
- }
Test01.java
- package com.api.Demo05;
-
- public class Test01 {
- public static void main(String[] args) {
- Student s1 = new Student("mayikt", 22);
- Student s2 = new Student("mayikt", 22);
- // s1==s2 双等于 比较的是两个对象的 内存地址是否相同
- System.out.println(s1==s2); //false
- System.out.println(s1.equals(s2)); //false,在没有重写Object父类中的equals()返回false
-
- String str1 = "mayikt";
- String str2 = "mayikt";
- System.out.println(str1==str2); //true
- System.out.println(str1.equals(str2)); //true
-
- /**
- * equals() 比较两个对象 值是否相同——错误的(∵ 底层是有重写的)
- * 自定义的对象 需要重写equals() 才可以实现
- *
- * String类中,equals() 比较两个字符串值是否相同
- *
- * Object 父类中 equals 比较 两个对象的内存地址是否相同
- * public boolean equals(Object anObject) {
- * if (this == anObject) {
- * return true;
- * }
- */
-
- /**
- * equals() 比较两个对象值是否相同
- * == 比较两个对象的内存地址是否相同
- * 条件:如果自定义的对象没有重写object父类的话,则是在比较两个对象的 内存地址是否相同
- */
- }
- }
Student.java 中重写 equals()
- /**
- * 重写父类中的equals() 实现比较两个对象的成员属性值是否相同
- */
- @Override
- public boolean equals(Object obj) {
- // this 代表 s1, obj 代表 s2
- if (this == obj) {
- return true;
- }
- // 比较 两个对象的类型是否一致
- // this.getClass() != obj.getClass() 两个对象的类型 如果不一致
- if (obj == null || this.getClass() != obj.getClass()) {
- return false;//不会在比较两个对象的 成员属性值
- }
- // 两个对象的类型 是一致的 需要比较两个对象属性值
- // 多态强转类型
- // String 类型中 equals()比较 两个字符串值相等 String 底层重写 object 父类
- Student s2 = (Student) obj;
- return this.age == s2.age && this.name.equals(s2.name);
- }
Test02.java
- package com.api.Demo05;
-
- import com.object.Demo31.Mayikt;
-
- public class Test02 {
- public static void main(String[] args) {
- Student s1 = new Student("mayikt", 22);
- Student s2 = new Student("mayikt", 22);
- // s1==s2 双等于 比较的是两个对象的 内存地址是否相同
- System.out.println(s1==s2); //false
- System.out.println(s1.equals(s2)); //true,在没有重写Object父类中的equals(),是比较两个对象的内存地址,返回false
- System.out.println(s1.equals(null)); //false
- System.out.println(s1.equals(new Mayikt())); //false
-
- Mayikt mayikt = new Mayikt();
- System.out.println(s1.getClass()); //class com.api.Demo05.Student
- System.out.println(s2.getClass()); //class com.api.Demo05.Student
- System.out.println(mayikt.getClass());//class com.object.Demo31.Mayikt
- }
- }
下一篇文章:instanceof 关键字