Java学习笔记89——Object类—equals方法
public boolean equals(Object obj)指示一些其他对象是否等于此。 今后想要弄明白一个类中的方法是如何实现的时候,API也没告诉我们怎么办呢? 看源码。将鼠标光标放在方法名上 ctrl+鼠标左键 通过观察源码发现:Object类中的equals方法实现底层依旧是== public boolean equals(Object obj) { return (this == obj); } 而==比较引用数据类型比较的是地址值,当地址值不一样的时候返回的是false
基本类型:比较的是值是否相同 引用类型:比较的地址值是否相同
equals:
引用数据类型: 不需要我们自己重写,自动生成即可 重写之前,默认调用的是Object类中的equals方法,默认比较的是地址值 重写之后,比较的是对象成员变量值
import java.util.Objects;
public class Student4 {
private String name;
private int age;
public Student4() {
}
public Student4(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;
}
// @Override
// public String toString() {
// return "姓名:" + name + ",年龄:" + age;
// }
@Override
public String toString() {
return "Student3{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) { //s3.equals(s4)
//this -- s3
//o -- s4
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student4 student4 = (Student4) o;
return age == student4.age &&
Objects.equals(name, student4.name);
}
}
public class StudentTest3 {
public static void main(String[] args) {
Student4 s1 = new Student4("阿伟", 18);
Student4 s2 = new Student4("阿伟", 18);
System.out.println(s1==s2);
Student4 s3 = s1;
System.out.println(s1==s3);
System.out.println("***************************");
System.out.println(s1.equals(s2)); //false //true
System.out.println(s1.equals(s3)); //true
System.out.println(s1.equals(s1)); //true
//但是,我们两个对象的成员变量值都一样,从现实生活角度出发,我们应该创建的是同一个学生
Student4 s4 = new Student4("小朱", 18);
System.out.println(s3.equals(s4)); //false
}
}

浙公网安备 33010602011771号