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{
}
溫習java基礎之-----自己手寫重寫 equals()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.