【Java】Object && equals

Object 类 equals()

  1. Object 中的 equals() 是直接判断 thisobj本身的值是否相等
  2. 可以重写 父类中的 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
    }
}

下一篇文章:

相关推荐
爱笑的源码基地1 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
段一凡-华北理工大学1 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe1 小时前
C++——多态
开发语言·c++
心平气和量大福大2 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
白露与泡影2 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
莫逸风3 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
从零开始的代码生活_3 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸3 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
z123456789864 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
GIS阵地4 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis