尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

【Java 基础深度解析】Object 类(上)—— 所有 Java 对象的根父类,toString 与 equals 彻底吃透

发布时间:2026/9/28 20:12:51

资讯中心
01
ARTICLE

【Java 基础深度解析】Object 类(上)—— 所有 Java 对象的根父类,toString 与 equals 彻底吃透

【Java 基础深度解析】Object 类(上)—— 所有 Java 对象的根父类,toString 与 equals 彻底吃透
前言很多初学 Java 的同学每天 new 对象写各种各样实体类却忽略了一个最重要的类 ——java.lang.Object。 Object 是 Java 整个类继承树的顶层根类Java 中每一个类都直接或者间接继承 Object哪怕你写一个空类没有写extends编译器也会隐式让它继承 Object。 我们平时打印对象用的toString()、判断对象相等的equals()都来自 Object。本篇上篇先搞懂 Object 的基础继承关系以及两个面试最高频的方法toString、equals。一、Object 是什么继承关系说明Object 位于java.lang包lang 包不需要手动 importJVM 自动导入。两种写法完全等价//写法1不显式写继承编译器自动处理 public class Student{ } //写法2显式继承Object效果一模一样 public class Student extends Object{ }Java 不存在多继承但是所有类最终向上追溯父类都会走到 Object。 基本数据类型int、char不是对象但是它们对应的包装类Integer、Character同样继承 Object。一句话总结Object 是一切引用类型对象的祖宗类。 Object 只有一个无参构造方法子类构造方法第一行默认调用super()本质就是调用 Object 无参构造。二、Object 全部 8 个原生方法总览Object 一共提供 8 个实例方法我们分成两大类可重写、不可重写 (final 修饰)。表格方法作用是否可重写public String toString()返回对象字符串描述✅可以重写public boolean equals(Object obj)判断对象相等✅可以重写public int hashCode()获取对象哈希码✅可以重写protected Object clone()对象克隆✅可以重写protected void finalize()垃圾回收回调JDK9 已废弃✅可以重写public final Class? getClass()获取运行时类对象❌final 禁止重写public final void wait()线程等待❌final 禁止重写public final void notify() / notifyAll()唤醒等待线程❌final 禁止重写上篇重点讲解 toString ()、equals ()hashCode、clone、多线程相关方法放到下篇讲解。三、重点方法详解 代码实战上篇3.1 toString () 方法源码默认实现public String toString() { return getClass().getName() Integer.toHexString(hashCode()); }默认输出格式类名十六进制哈希值。 很多新手疑惑打印对象的时候为什么出来一串看不懂字符串根源就在这里。Student s new Student(); System.out.println(s); //等价于 System.out.println(s.toString());默认 toString 几乎没有业务价值开发中实体类一定要重写 toString方便日志打印调试。✅重写示例class Student{ private String name; private Integer age; public Student(String name, Integer age) { this.name name; this.age age; } Override public String toString() { return Student{ name name \ , age age }; } }小技巧IDEA 快捷键Alt Insert一键自动生成 toString。3.2 equals () 方法【重中之重面试必问】Object 原生 equals 源码public boolean equals(Object obj) { return (this obj); }划重点原生equals内部就是。对于引用类型比较的是对象内存地址判断是不是同一个对象。但是业务场景我们经常希望两个不同对象只要成员变量内容一样就判定相等。 这时就必须重写 equals。举个例子两个学生对象姓名年龄一样我们希望判定相等。❌不重写 equals 的情况Student s1 new Student(张三,18); Student s2 new Student(张三,18); System.out.println(s1.equals(s2)); //输出false两个不同内存地址原生equals用比较地址✅规范重写 equals重写 equals 要遵守五大契约自反性、对称性、传递性、一致性、非空约束。 高质量 equals 实现模板Override public boolean equals(Object o) { //1.先判断是不是同一个对象地址相同直接true if (this o) return true; //2.判断对象是否为空类型是否匹配 if (o null || getClass() ! o.getClass()) return false; //3.向下转型比较业务属性 Student student (Student) o; return Objects.equals(name, student.name) Objects.equals(age, student.age); }注意使用Objects.equals()可以优雅规避空指针问题不要直接写name.equals(student.name)。四、上篇高频易错坑点总结坑 1分不清 和 equals原生 Object.equals 等价于 但是 String、包装类已经重写 equals此时 equals 比较内容。String a new String(abc); String b new String(abc); System.out.println(ab); //false地址不同 System.out.println(a.equals(b));//true重写后比较内容坑 2重写 equals 没有判空产生空指针异常优先使用java.util.Objects.equals工具。坑 3混淆 getClass 和 instanceofinstanceof会兼容子类getClass()严格匹配精确类型。小结本篇我们学习了 Object 的继承体系掌握 toString 和 equals 的底层原理与重写规范。下篇预告 讲解hashCode()、clone()、getClass()、wait/notify 多线程方法完整实体类综合案例配套面试真题。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。