object中自己重写equals方法

自己重写后得student类

package day7.demo1;

public class Stundent {
    public String name;
    public  int age;
    public Stundent(){

    }
    public Stundent(String name,int age){
     this.name=name;
     this.age=age;
    }
    public String getName(){
        return name;
    }
    public void SetName(String name){
       this.name=name;
    }

    public int getAge(){
        return age;
    }
    public void GetName(int age){
        this.age=age;
    }
    @Override  //快捷建alt+inert系统帮我们写得,下面得是自己重写得
    public boolean equals(Object obj) {
       if(obj==null){
           return false;
        }
       if(obj==this){//传递得参数是自己
           return true;
       }

        //增加判断,是student类型才转换
        if(obj instanceof Stundent){
            //使用下向下转型把object强转未Stundent
            Stundent st1=(Stundent)obj;
            //比较两个对象得属性:一个是调用方法得st 这里得this 另一个是传递过来得参数st1 这里指得是st1,字符串得内容比较用equals,数字大小比较用==
            boolean res=this.name.equals(st1.name)&&this.age==st1.age;
            return res;
        }
        //不是Stundent类型直接返回false
        return false;

    }

    @Override  //快捷建alt+inert
    public String toString() {
        return "Person{"+
                "name='"+name+'\''+
                ",age="+age+
                '}';
    }
}

调用代码:

package day7.demo1;
/*
 *java.lang.Object
 *指示其他某个对象是否与此对象“相等”。
 *
 *
 * */

import java.util.Random;

public class Demo1ObjectEquals {
    public static void main(String[] args) {

        Stundent st=new Stundent("姓名1",9);
        Stundent st1=new Stundent("姓名1",9);
        System.out.println("st的地址值"+st);//st的地址值day7.demo1.Stundent@1540e19d
        System.out.println("st1的地址值"+st1);//st1的地址值day7.demo1.Stundent@677327b6
        //因为Stundent默认继承object类所以可以直接调用equals方法
        /*
        *  public boolean equals(Object obj) {
        return (this == obj);
           }
         ==比较运算符返回的是true,false
         * 值类型比较的是,值
         * 引用类型比较的是地址值
         * this是谁?谁调用的方法,源码中的this就指的是谁,st调用的equals,this值的是st对象
         * obj?传过来的参数p2  this==obj ==>st=st1
        * */
       System.out.println( st.equals(st1));//false,单纯的比较地址值没有意义,所以重写,equals方法比较两个对象的属性,是否相等,重写后在次调用就结果为true

        Random r=new Random();
        System.out.println( st.equals(r));//equals传递得是object 所以这里可以传r 程序之所以没保存是因为Stundent类中得equals方法里有对类型得判断
        System.out.println( st.equals(null));//false

    }


}

 

posted @ 2021-05-27 16:14  程序杨%  阅读(105)  评论(0)    收藏  举报