溫習java基礎之-----自己手寫重寫 equals()

package com.jidongcloud;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.Objects;

/**
 * ClassName:Eques
 * PackageName:com.jidongcloud
 * Description:
 *測試equeals
 * @date:2020/6/12 20:23
 * @author:robin
 */
public class Eques {
    public static void main(String[] args) {
         Person P1=new Person(23,"張三","漂亮");
             Person p2=P1;
             Person p3=new Person(23,"張三","漂亮");


        System.out.println(P1==p3); //false 表達式 p1、p3指向不同的堆地址空間。
        System.out.println(P1.equals(p3)); //false 表達式 p1、p3指向不同的堆地址空間。  Object中equals也是用  “==”判斷兩個對象
      // 重寫equals後  System.out.println(P1.equals(p3)); 返回 true
        //那麼問題來了,如果我想讓上面條件返回true呢,該怎麼做?
        //那麼就要這樣:重寫 equals方法。
        //判斷對象一般包括以下幾種情況
        //1)兩個引用指向同一個對象
        System.out.println(p2.equals(P1));// true //p1、p2指向相同的地址空間
        //2)參數對象爲null
        Person p4= null;
        System.out.println(P1.equals(p4));// false //p1、p2指向相同的地址空間
        //3)參數對象的類型與當前對象的類型不一樣
        Father P5=new Father();
        System.out.println(P1.equals(P5));//false //類型不一樣,直接false
        // 4)兩個對象中有的字段值不一樣
        Person p7=new Person(54,"張三","漂亮");
        System.out.println(P1.equals(p7)); //false

    }
}
class  Person{
    public  int age;
    public  String name;
    public  String waimao;

    public Person(int age, String name, String waimao) {
        this.age = age;
        this.name = name;
        this.waimao = waimao;
    }

    @Override
    public boolean equals(Object o) {
        //1)兩個引用指向同一個對象
        if (this == o) return true;
        //2)參數爲 null
        if(o==null) return false;
        //3)類型不一樣,直接返回false
        if (this.getClass() != o.getClass()) return false; // i

        //4)判斷兩個對象的字段的值
        Person person = (Person) o;
        if (this.age!=person.age) return  false;
        //這是您自己定義的,根據實際場景來寫。
        if (this.name==null){
            if (person.name != null){
                return  false;
            }
        }else if (! this.name.equals(person.name)){
            return false;
        }
        //這是您自己定義的,根據實際場景來寫。
        if (this.waimao==null) return false;

         return  true;
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name, waimao);
    }
}
class  Father{

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章