好久没更新文章啦,今天回归!!讲一下Object类有哪些常见方法?

Object类是所有类的基类,如果一个类没有明确继承其他类,那么它默认会继承Object类,有以下常见方法。

1.toString():

  • 返回对象的字符串表示形式。
  • 默认实现:返回类名 + “@” + 哈希码(例如 com.example.MyClass@123456)
    但是返回这种结果是没有什么意义的,所以一般都要重写这个方法。

2.equals(Object obj):

  • 判断两个对象是否相等。
  • 默认实现: 比较两个对象的引用是否相等(是否是同一个对象)。
  • 需要根据业务重写该方法,比如:比较两个对象的属性值都相同就认为它们相等。

注意: 重写equals方法时,必须同时重写hashCode()方法。

3.hashCode()

  • 返回对象的哈希值,主要用于哈希表(HashMap,HashSet)。
  • 默认实现: 返回对象的内存地址经过哈希计算后得到的值。

注意:
如果两个对象通过 equals() 方法比较结果为 true,那么它们的 hashCode() 必须相同。
但是,hashCode() 相同的两个对象,equals() 比较结果不一定为 true。
所以一般是先hashCode() ,再equals() 。

4.getClass():

  • 返回对象运行时的类(Class对象)。
  • 该方法被声明为final无法被重写。
  • 常用于反射,类型检查(如 instanceof) 等场景。

5.clone():

  • 创建并返回该对象的一个副本。
  • 类必须实现Cloneable 接口,否则会抛出CloneNotSupportedException 异常。
  • 默认实现: 进行浅拷贝,即只复制对象本身以及其基本数据类型的属性,而引用类型的属性仍然指向原对象的引用。
  • 建议: 通常要重写该方法,以实现深拷贝。

6.notify()、notifyAll() 和 wait()

  • 用于线程间的协作。
    notify(): 随机唤醒一个在该对象上等待的线程。
    notifyAll(): 唤醒所有在该对象上等待的线程。
    wait(): 使当前线程进入等待状态,直到其他线程调用该对象的 notify() 或 notifyAll() 方法。
    注意: 这些方法必须在同步块(synchronized)中调用。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐