equals方法

/*
    Object类中成员方法:
        public boolean equals(Object obj)
        protected void finalize() 是做垃圾回收的,不是立刻就做回收
            面试题:final  finally  finalize 区别?
        protected Object clone()


    知识点:
        1、==比较,如果比较的基本数据类型,直接比较具体的数值是否相等,若比较的是引用数据类型,比较的是地址值是否一样
                                             Object中的equals源码   public boolean equals(Object obj) {
                                                                            return (this == obj);
                                                                        }
 

       2、Object类中的equals方法默认直接使用==比较两个对象,若地址值不一样,就是false
 */
class Demo2 extends Object {
    int a;

    @Override
    public String toString() {
        return "Demo2{" +
                "a=" + a +
                '}';
    }


    @Override
    public boolean equals(Object o) { // d1.equals(d2)
        /*
            o -- d2
            this -- d1
         */
        if (this == o) return true;//如果d1和d2的地址值相等,返回true,==比较的是地址值,d1和d2是引用数据类型
        if (o == null || getClass() != o.getClass()) return false;//getClass() != o.getClass()表示不是同一个类
        Demo2 demo2 = (Demo2) o;//将d2转为Demo类型
        return this.a == demo2.a;//==比较基本数据类型的数值,this.a,demo2.a是基本数据类型
    }
}

public class ObjectDemo2 {
    public static void main(String[] args) {
        //创建第一个Demo2对象
        Demo2 d1 = new Demo2();
        d1.a = 100;
        System.out.println(d1);

        //创建第二个Demo2对象
        Demo2 d2 = new Demo2();
        d2.a = 100;
        System.out.println(d2);

        // Object中的equals方法默认比较的是地址值
        System.out.println(d1.equals(d2)); // false ; 类重写equals方法后,比较的就是成员变量值:true
        String s1 = new String("hello"); // 堆内存中
        String s2 = "hello"; // 方法区中的常量池中
        System.out.println(s1 == s2); // false
        System.out.println(s1.equals(s2)); // true 说明String类中重写equals方法,比较的是内容
        System.out.println(s1); // hello 说明String类中重写toString方法,获取对象中的内容


    }
}
posted @ 2024-08-07 22:21  ていせい  阅读(3)  评论(0编辑  收藏  举报