Object中的方法以及对象相等的判定

看图说话

Object中的方法以及对象相等的判定_第1张图片

Object有以下几个方法

  • getClass()

    final类型,主要是用来获得运行时的类型

  • hashCode()

    返回该对象的哈希码值,方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。该方法常用于hash查找,重写equals方法一般都要重写hashCode方法

  • equals()

    equals方法一般和==是不一样的,但是在Object中,两者一样。子类一般都要重写这个方法

  • clone()

    创建并返回对象的副本,它实现对象的浅复制

  • toString()

    返回对象的字符串表示

  • notify()

    唤醒在该对象上等待的某个线程

  • notifyAll()

    唤醒在该对象上等待的所有线程

  • wait()

    wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait方法一直等待,直到获得锁或者被中断。wait(long timeout)设定了一个超时间隔,如果在规定时间没有获得锁就返回。

    调用wait方法后线程进入睡眠状态,直到以下事件发生:

    1. 其他线程调用了该对象的notify/notifyAll方法
    2. 其他线程调用interrupt中断了该线程
    3. 时间间隔到了
  • finalize()

    该方法用于释放资源,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

    当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

判断两个对象是否相等(对象的内容和hashcode必须相等)

1.==和equals区别

  • ==用于判断对象的地址是否相等
  • equals方法也用作判断对象是否相等,有两种情况:
    1. 类没有覆盖equals方法,则当用equals比较该类的两个对象时,相当于调用父类的equals方法,等同于==。
    2. 类覆盖了equals方法,一般会将equals重写成判断两个对象的内容是否相等,如果它们的内容相等,就返回true。

举个例子:

public class Person {
   
    private int age;
    public Person(int age) {
   
        this.age = age;
    }
    public int getAge() {
   
        return age;
    }
    public void setAge(int age) {
   
        this.age = age;
    }
    public static void main(String[] args) {
   
        Person p1 = new Person(10);
        Person p2 = new Person(10);
        String s1 = new String("123");
        String s2 = new String("123");
        System.out.println(p1 

你可能感兴趣的:(Java基础)