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()
最新推荐文章于 2022-02-04 21:14:31 发布