Object类下的方法总结

版权声明:四川华迪信息技术有限公司java实训班乔二 https://blog.csdn.net/qxqx451/article/details/79081914

类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
在API文件上Object类有9个方法:

经常会用到的方法

  1. equals

    equals用于指示其他某个对象是否与此对象“相等”。
    在Object类中equals的方法体是

public boolean equals(Object obj) {
        return (this == obj);
    }

我们知道“==”在用于两个对象比较的时候比较的是两个对象的内存地址,所以在Object类下equals方法比较的是内存地址。
在String类中的equals的方法体是

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

研究String类中的equals方法体可以看到
第一步:使用“==”比较两个对象的地址,地址若是一样,那么两个对象的值也肯定相等,直接返回true,否则进入下一步;
第二步:使用instanceof方法查看传入对象anObject是否是String类的对象,结果为真就进入下一步的比较,否则直接返回false;
第三步:在验证传入对象anObject为String类对象后,将anObject强制转换为String类型(其实我总觉得这个有点画蛇添足,第二步已经验证过了为什么还要强制转换,可能有什么我没有考虑到的地方把,毕竟是Java官方代码)。比较当前对象与传入对象的长度,若两对象的长度不等,返回false,若长度相等则进入下一步比较;
第四步:将两个String类对象存入Char数组中,之后逐个比较两个数组中的值,最后验证两个字符串是否相等。

2.hashCode()
返回该对象的哈希码值 。默认情况下,该方法会根据对象的地址来计算。不同对象的hashCode()一般来说不会相同(也就是说二般情况下会相同,看了会资料有点蒙,先不管这个)。但是同一个对象的hashCode()值肯定相同。

System.out.println("该对象的哈希码值是:"+p1.hashCode());
该对象的哈希码值是:2018699554

3.toString()
返回该对象的字符串表示

System.out.println("toString方法输出对象的字符串表示:"+p1.toString());
toString方法输出对象的字符串表示:com.hwadee.day0115.practice@7852e922

toString方法输出的是包名.类名+@+地址值

可以看到两个方法都会输出一个地址值,两个值是可以相互转换的

System.out.println("将hashcode值转换为toString中的地址值:  "+Integer.toHexString(p1.hashCode()));

将hashcode值转换为toString中的地址值:  7852e922

线程中用到的方法

  1. void notify()
    唤醒在此对象监视器上等待的单个线程。
  2. void notifyAll()
    唤醒在此对象监视器上等待的所有线程。
  3. void wait()
    在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

其他不常用到的方法

  1. protected Object clone()
    创建并返回此对象的一个副本。
  2. protected void finalize()
    当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
  3. Class
System.out.println("getClass()输出"+p1.getClass());
System.out.println("p1.getClass().getName(): "+p1.getClass().getName());
getClass()输出:  class com.hwadee.day0115.practice
p1.getClass().getName()输出:  com.hwadee.day0115.practice

猜你喜欢

转载自blog.csdn.net/qxqx451/article/details/79081914
今日推荐