目录
  • 1.equals方法
    • 1.API中equals方法的介绍
    • 2.==和equals 的对比
  • 2.hashCode方法
    • 3.toString方法
      • 4.finalize方法

        本文主要带大家看看Object类中一些常用方法的API文档的介绍和JDK中的源码。

        1.equals方法

        1.API中equals方法的介绍

        Java深入探究Object类的方法

        2.==和equals 的对比

        • == 既可以判断基本类型,又可以判断引用类型,如果判断的是基本类型,判断的是值是否相等,如果判断的是引用类型,则判断的是地址是否相等,即判断是不是同一个对象。
        • equals 方法是 Object 类中的方法,只能判断引用类型,默认的是判断地址是否相等,子类中往往会重写该方法,重写后用于判断内容是否相等

        我们可以看看 Object,String 和 Integer中的 equals 方法的 JDK 源码。

        Object o = new Object();
        o.equals(1);//Object类中的equals方法
        System.out.println("hello".equals("hello"));//String中的equals方法
        Integer integer = new Integer(5);
        System.out.println(integer.equals(5));//Integer中的equals方法
        //将光标放在equals方法上,按Ctrl同时按鼠标左键,就可跳转到String和Integer中的equals方法的JDK源码。
        
        //Object类中的equals方法
        public boolean equals(Object obj) {
                return (this == obj);//判断是不是当前对象
        }
        
        //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;
            }
         //Integer类中重写的equals方法
        public boolean equals(Object obj) {
                if (obj instanceof Integer) {//判断当前类型是不是Integer类型
                    return value == ((Integer)obj).intValue();//向下转型
                }
                return false;
            }
        

        2.hashCode方法

        1.API中hashCode方法的介绍

        Java深入探究Object类的方法

        2.提高具有哈希结构容器的的效率。

        3.两个引用,如果指向的同一个对象,哈希值一样,指向不同对象,哈希值就不一样。

        4.哈希值主要根据地址来的,但不能将哈希值等价于地址。

        3.toString方法

        1.API中toString方法的介绍

        Java深入探究Object类的方法

        2.默认返回:全类名(包名+类名)+@+哈希值的十六进制。

        3.往往重写toString方法,用于返回对象属性。

        4.当直接输出对象时,toString方法会被默认的调用。

        //JDK中的toString方法源码
        public String toString() {
                return getClass().getName() + "@" + Integer.toHexString(hashCode());
            //返回全类名(包名+类名)+@+哈希值的十六进制
            }
        //重写toString方法
         @Override
            public String toString() {
                return "Person{" +
                        "name='" + name + '\'' +
                        ", age=" + age +
                        ", gender=" + gender +
                        '}';
            }//往往重写toString方法,用于返回对象属性。
        

        4.finalize方法

        1.API中finalize方法的介绍

        Java深入探究Object类的方法

        2.对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作。

        3.当某个对象没有引用时,jvm就会使用垃圾回收机制来销毁此对象,销毁对象前会先调用finalize方法。

        4.垃圾回收机制的调用,是由系统的GC算法来决定的,也可通过System.gc()主动触发。

        声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。