Skip to content

object 类常见的方法

约 799 字大约 3 分钟

Java基础美团

2025-03-26

⭐ 题目日期:

美团 - 2024/12/23

📝 题解:

在Java中,Object类是所有类的根父类,其方法被所有对象继承。以下是Object类的核心方法及其作用:


1. 基础方法

(1) equals(Object obj)

  • 作用:比较两个对象是否“逻辑相等”(默认比较内存地址,需重写)。
  • 示例
    public boolean equals(Object obj) {
        return (this == obj); // 默认实现(地址比较)
    }
  • 重写规则
    • 自反性:x.equals(x) 必须为 true
    • 对称性:若 x.equals(y)true,则 y.equals(x) 必须为 true
    • 传递性:若 x.equals(y)y.equals(z)true,则 x.equals(z) 必须为 true
    • 一致性:多次调用结果应相同(不依赖可变状态)。
    • 非空性:x.equals(null) 必须为 false

(2) hashCode()

  • 作用:返回对象的哈希码,用于哈希表(如HashMap)。
  • equals()的契约
    • x.equals(y)true,则 x.hashCode() == y.hashCode()
    • 哈希码不同时,equals()必为 false
  • 示例
    public native int hashCode(); // 默认返回对象内存地址的哈希

(3) toString()

  • 作用:返回对象的字符串表示(默认格式:类名@哈希十六进制)。
  • 重写示例
    public String toString() {
        return "Person{name=" + name + ", age=" + age + "}";
    }

2. 多线程相关方法

(1) wait() / wait(long timeout) / wait(long timeout, int nanos)

  • 作用:让当前线程进入等待状态,直到其他线程调用notify()/notifyAll()或超时。
  • 使用条件:必须在synchronized代码块中调用(否则抛IllegalMonitorStateException)。
  • 示例
    synchronized (lock) {
        while (!condition) {
            lock.wait(); // 释放锁并等待
        }
    }

(2) notify() / notifyAll()

  • 作用:唤醒在同一个锁上等待的单个线程notify())或所有线程notifyAll())。
  • 示例
    synchronized (lock) {
        condition = true;
        lock.notify(); // 唤醒一个等待线程
    }

3. 类型与生命周期

(1) getClass()

  • 作用:返回对象的运行时类(Class对象),反射机制的基础。
  • 示例
    Object obj = new String("Hello");
    Class<?> clazz = obj.getClass(); // 返回 String.class

(2) finalize()

  • 作用:对象被垃圾回收前由JVM调用(不推荐依赖,资源释放应使用try-with-resources或显式关闭)。
  • 问题
    • 执行时间不确定,可能导致资源泄漏。
    • JDK 9+已标记为@Deprecated

4. 对象克隆

clone()

  • 作用:创建并返回对象的副本(浅拷贝)。
  • 使用条件:需实现Cloneable接口(否则抛CloneNotSupportedException)。
  • 示例
    public class Person implements Cloneable {
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone(); // 浅拷贝
        }
    }

总结:Object类方法列表

方法作用常见用途
equals(Object obj)对象逻辑相等性比较重写以支持内容比较(如String、自定义类)
hashCode()生成哈希码哈希表键值设计(如HashMap
toString()对象字符串表示调试、日志输出
wait(), notify()线程间通信生产者-消费者模型
getClass()获取运行时类反射、类型检查
clone()对象克隆(浅拷贝)复制对象状态
finalize()垃圾回收前清理(已弃用)不推荐使用

注意事项

  1. 重写equals()必须重写hashCode():确保哈希表操作正确性。
  2. 线程安全wait()/notify()必须在同步上下文中使用。
  3. 深拷贝与浅拷贝clone()默认浅拷贝,需手动实现深拷贝逻辑。
  4. 避免依赖finalize():优先使用AutoCloseable接口管理资源。