Object 类 equals()
- Object 中的 equals() 是直接判断 this 和 obj本身的值是否相等
- 可以重写 父类中的 equals() 比较两个对象成员属性值是否相等
示例代码:
Student.java
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
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父类的话,则是在比较两个对象的 内存地址是否相同
*/
}
}
重写Object父类中的equals()
Student.java 中重写 equals()
java
/**
* 重写父类中的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
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
}
}
下一篇文章: