温习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{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值