Java Object 类常用方法全讲解

Object 是 Java 中所有类的根父类,任何对象都直接 / 间接继承它,所有对象都能调用它提供的方法。

一、全部核心常用方法清单

  1. toString()
  2. equals(Object obj)
  3. hashCode()
  4. getClass()
  5. clone()
  6. wait() / wait(long) / wait(long,int)
  7. notify() / notifyAll()
  8. finalize()(已废弃,仅了解)

1. toString()

作用

返回对象的字符串描述,打印对象时默认自动调用。

默认实现

java

复制代码
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

输出格式:类名@哈希十六进制,可读性极差,业务实体必须重写。

重写示例

java

复制代码
@Override
public String toString() {
    return "FlowerNote{id=" + id + ", title=" + title + ", userId=" + userId + "}";
}

2. equals(Object o)

作用

对比两个对象是否逻辑相等。

默认实现(底层 ==)

java

复制代码
public boolean equals(Object obj) {
    return (this == obj);
}
  • ==:基本类型比值,引用类型比内存地址;
  • 需求:实体类需要按属性判断相等,必须重写 equals,配套重写 hashCode。

标准重写规范

  1. 判断是否是自身 == o,直接返回 true
  2. 判断对象是否为 null、类是否一致
  3. 强转后逐个对比成员变量

3. hashCode()

作用

返回对象哈希值,用于哈希容器:HashMap、HashSet、Redis 缓存等。

规则(强制约束)

  1. 两个对象 equals() == true,它们的 hashCode 必须相等;
  2. hashCode 相等,equals 不一定相等(哈希碰撞);
  3. 不重写时,返回对象内存地址换算数字。

开发规范:重写 equals 必须同步重写 hashCode,否则存入哈希集合会失效。

4. getClass()

作用

返回当前对象的运行时 Class 对象,反射核心方法。

特点

  • 被 final 修饰,不能重写;
  • 区分编译时类型和运行时真实类型。

java

复制代码
FlowerNote note = new FlowerNote();
Class<?> clazz = note.getClass();
System.out.println(clazz.getName()); // 输出全类名

结合反射:动态创建对象、调用方法、读取属性。

5. clone()

作用

快速复制对象,生成新副本,分为浅拷贝、深拷贝。

限制

  1. 方法是 protected,外部不能直接调用;
  2. 类必须实现 Cloneable 标记接口,否则抛 CloneNotSupportedException。

浅拷贝默认规则

基本类型直接复制值;引用类型只复制地址,新旧对象共用同一个引用对象。

6. wait () /notify () /notifyAll () 【多线程】

使用前提:必须在 synchronized 同步代码块内调用

  1. wait():释放锁,让当前线程进入等待队列,等待被唤醒;
  2. notify():随机唤醒一个等待该对象锁的线程;
  3. notifyAll():唤醒所有等待该对象锁的线程;

适用场景:生产者消费者、消息队列(你的项目 RocketMQ 底层同步思想)。

7. finalize()

作用

对象被 GC 回收前触发执行,用于释放资源。

现状

Java9 开始标记为 @Deprecated,不推荐使用,资源释放改用 try-with-resources。


高频面试重点总结

  1. 所有 Java 对象都继承 Object,无需手动 extends;
  2. toString 打印日志必备,实体一律重写;
  3. equals + hashCode 成对重写,哈希集合必用;
  4. getClass() 反射基石,final 不可重写;
  5. clone() 需要实现 Cloneable,区分深浅拷贝;
  6. wait/notify 配套 synchronized,用于线程间通信;
  7. finalize 已废弃,不用记实现。
相关推荐
考虑考虑3 小时前
JDK26中的List.ofLazy()
java·后端·java ee
小蒜学长3 小时前
基于SpringBoot的公寓报修管理系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·公寓报修管理系统·多角色协同
for_ever_love__4 小时前
MySQL 主从复制讲透:binlog 原理、搭建步骤与读写分离
java·数据库·mysql·binlog·读写分离·原理·主从复制
Ada's4 小时前
【计算机基础系列】003:Python数据结构
开发语言·数据结构·python
2601_962885724 小时前
如何用 Python 计算 TRIX 三重指数平滑均线指标?
开发语言·python
还卿一钵无情泪5 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
小π军6 小时前
操作系统面试题
java·linux·服务器
倔强的石头1066 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
传人once6 小时前
页面中心圆圈放大效果如何写
开发语言·javascript·ecmascript