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 } }
浙公网安备 33010602011771号