Object 类 equals()
- 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); //falseSystem.out.println(s1.equals(s2)); //false,在没有重写Object父类中的equals()返回falseString str1 = "mayikt";String str2 = "mayikt";System.out.println(str1==str2); //trueSystem.out.println(str1.equals(str2)); //true/*** equals() 比较两个对象 值是否相同——错误的(∵ 底层是有重写的)* 自定义的对象 需要重写equals() 才可以实现** String类中,equals() 比较两个字符串值是否相同** Object 父类中 equals 比较 两个对象的内存地址是否相同* public boolean equals(Object anObject) {* if (this == anObject) {* return true;* }*//*** equals() 比较两个对象值是否相同* == 比较两个对象的内存地址是否相同* 条件:如果自定义的对象没有重写object父类的话,则是在比较两个对象的 内存地址是否相同*/}
}
重写Object父类中的equals()
Student.java 中重写 equals()
/*** 重写父类中的equals() 实现比较两个对象的成员属性值是否相同*/@Overridepublic boolean equals(Object obj) {// this 代表 s1, obj 代表 s2if (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); //falseSystem.out.println(s1.equals(s2)); //true,在没有重写Object父类中的equals(),是比较两个对象的内存地址,返回falseSystem.out.println(s1.equals(null)); //falseSystem.out.println(s1.equals(new Mayikt())); //falseMayikt mayikt = new Mayikt();System.out.println(s1.getClass()); //class com.api.Demo05.StudentSystem.out.println(s2.getClass()); //class com.api.Demo05.StudentSystem.out.println(mayikt.getClass());//class com.object.Demo31.Mayikt}
}
下一篇文章: