【java面试】Object 有哪些常用方法?大致说一下每个方法的含义,有代码示例

文章目录


在Java中, Object类是所有类的超类(或称为基类)。这意味着每个类都直接或间接地继承自 Object类,并因此获得了 Object类中定义的方法。以下是 Object类中的一些常用方法,以及它们的含义和代码示例:

  1. equals(Object obj)

    • 含义:用于比较两个对象是否相等。默认情况下,此方法会比较对象的引用是否相等(即它们是否指向内存中的同一个对象)。但通常,子类会重写此方法以提供基于对象内容的比较。
    • 示例:
      public class Person {
          private String name;
          
          // 构造函数、getter和setter等
          
          @Override
          public boolean equals(Object obj) {
              if (this == obj) return true;
              if (obj == null || getClass() != obj.getClass()) return false;
              Person person = (Person) obj;
              return name != null ? name.equals(person.name) : person.name == null;
          }
      }
      
      // 使用示例
      Person p1 = new Person("Alice");
      Person p2 = new Person("Alice");
      System.out.println(p1.equals(p2)); // 如果equals方法被正确重写,则输出true
      
  2. hashCode()

    • 含义:返回对象的哈希码值,该值通常用于在哈希表中存储对象。如果两个对象根据equals(Object)方法是相等的,那么它们的hashCode()方法必须产生相同的整数结果。
    • 示例:当重写equals方法时,通常也需要重写hashCode方法以保持一致性。
    • 下滑查看解决方法

  1. toString()

    • 含义:返回对象的字符串表示形式。默认情况下,此方法返回类名和对象的哈希码的无符号十六进制表示形式。子类通常会重写此方法以返回更有意义的字符串表示形式。
    • 示例:
      public class Person {
          private String name;
          
          // 构造函数、getter和setter等
          
          @Override
          public String toString() {
              return "Person{" +
                      "name='" + name + '\'' +
                      '}';
          }
      }
      
      // 使用示例
      Person p = new Person("Alice");
      System.out.println(p); // 输出: Person{name='Alice'}
      
  2. clone()

    • 含义:创建并返回此对象的一个副本。默认情况下,此方法是保护的,意味着它只能在同一包内的类或子类中访问。要使其对外部可用,子类必须覆盖此方法并声明为public。另外,由于对象的默认克隆机制是浅拷贝(shallow copy),因此如果对象包含对其他对象的引用,则这些引用将被复制到新对象中,而不是引用的对象本身。
    • 示例:通常,只有实现了Cloneable接口的类才能被克隆。
  3. finalize()

    • 含义:当垃圾回收器确定不存在对该对象的更多引用时,在对象被垃圾回收之前调用此方法。但是,在现代Java中,finalize方法已经被弃用,因为垃圾回收器的行为是不确定的,并且很难预测何时会调用finalize方法。
    • 示例:由于finalize方法已被弃用,并且不建议使用,因此这里不提供示例代码。
  4. getClass()

    • 含义:返回一个Class对象,该对象表示此Object的运行时类。
    • 示例:
      Object obj = new String("Hello");
      Class<?> objClass = obj.getClass();
      System.out.println(objClass.getName()); // 输出: java.lang.String
      
  5. notify()

    • 含义:唤醒在此对象监视器上等待的单个线程(如果存在)。
    • 示例:通常与wait()synchronized关键字一起使用来实现线程间的通信。
  6. notifyAll()

    • 含义:唤醒在此对象监视器上等待的所有线程。
    • 示例:同样,通常与wait()synchronized关键字一起使用来实现线程间的通信。
  7. wait()

    • 含义:导致当前线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法;或者直到某个其他线程中断当前线程;或者已发生某种“特殊操作”(通常是由于某种I/O操作或notify()/notifyAll()的调用)。
    • 示例:也通常与synchronized一起使用,用于线程间的通信和同步。
  • 22
    点赞
  • 219
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值