Object 是 Java 中所有类的根父类,任何对象都直接 / 间接继承它,所有对象都能调用它提供的方法。
一、全部核心常用方法清单
toString()equals(Object obj)hashCode()getClass()clone()wait()/wait(long)/wait(long,int)notify()/notifyAll()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。
标准重写规范
- 判断是否是自身
== o,直接返回 true - 判断对象是否为 null、类是否一致
- 强转后逐个对比成员变量
3. hashCode()
作用
返回对象哈希值,用于哈希容器:HashMap、HashSet、Redis 缓存等。
规则(强制约束)
- 两个对象
equals() == true,它们的hashCode必须相等; hashCode相等,equals不一定相等(哈希碰撞);- 不重写时,返回对象内存地址换算数字。
开发规范:重写
equals必须同步重写hashCode,否则存入哈希集合会失效。
4. getClass()
作用
返回当前对象的运行时 Class 对象,反射核心方法。
特点
- 被
final修饰,不能重写; - 区分编译时类型和运行时真实类型。
java
FlowerNote note = new FlowerNote();
Class<?> clazz = note.getClass();
System.out.println(clazz.getName()); // 输出全类名
结合反射:动态创建对象、调用方法、读取属性。
5. clone()
作用
快速复制对象,生成新副本,分为浅拷贝、深拷贝。
限制
- 方法是
protected,外部不能直接调用; - 类必须实现
Cloneable标记接口,否则抛CloneNotSupportedException。
浅拷贝默认规则
基本类型直接复制值;引用类型只复制地址,新旧对象共用同一个引用对象。
6. wait () /notify () /notifyAll () 【多线程】
使用前提:必须在 synchronized 同步代码块内调用
wait():释放锁,让当前线程进入等待队列,等待被唤醒;notify():随机唤醒一个等待该对象锁的线程;notifyAll():唤醒所有等待该对象锁的线程;
适用场景:生产者消费者、消息队列(你的项目 RocketMQ 底层同步思想)。
7. finalize()
作用
对象被 GC 回收前触发执行,用于释放资源。
现状
Java9 开始标记为 @Deprecated,不推荐使用,资源释放改用 try-with-resources。
高频面试重点总结
- 所有 Java 对象都继承 Object,无需手动 extends;
toString打印日志必备,实体一律重写;equals + hashCode成对重写,哈希集合必用;getClass()反射基石,final 不可重写;clone()需要实现 Cloneable,区分深浅拷贝;- wait/notify 配套 synchronized,用于线程间通信;
- finalize 已废弃,不用记实现。