Java学习笔记89——Object类—equals方法

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
​
    }
}
posted @ 2021-12-15 20:41  欧朋  阅读(127)  评论(0)    收藏  举报