首页 > 代码库 > java:复写equals实例

java:复写equals实例

class User
{
    String name;
    int age;
    /*
    *比较过程思路:
    *1、两个对象指向位置相同,那么他们就相等,return后跳出函数,不再往下执行
    *2、指向位置不同,有3情况
    *a:这两对象类型相同,并且内容相同,也属于相等
    *b:类型相同,内容不同,属于不等;
    *c:类型不同,属于不等
    */
    public boolean equals(Object obj){
        //1、指向位置相同,指定同一对象
        if(this == obj){
            return true;
            }
        

        //2、指向位置不同
        //能调用这里的equals,肯定是生成了User对象的,所以this肯定是User类型
        //判断obj是不是User类型,如果是就跟this为同一类型
        boolean b =obj instanceof User;
        if(b){
            /*
            *类型相同,obj为User类型,而跟this位置不同的对象(第1步已证明)
            *obj来源可能是:
            *User obj = new User();
            *或 
            *Object obj =new Object(); //Object是 User的父类
            */

            //obj向下转型为User对象,以便一定能调用User里面的值
                User u =(User)obj;
//这里的equals是用name调用的(jdk里面String复写过的equals方法),不是当前类的equals
//基本数据类型用==比,引用数据类型用equals比 if(this.age == u.age && this.name.equals(u.name)){ return true; }else{ return false; } }else { //类型不同,不是user对象,不等 return false; } } }
class Test
{
    public static void main(String args[]){
        //测试一:同地址,相等
        User u1 = new User();
        User u2 = u1;
        u1.name="sss";
        boolean b = u1.equals(u2);
        System.out.println(b);

        //测试二:地址不同,类型、内容相同,相等
        User u3 = new User();
        User u4 = new User();
        u3.name="sss";
        u4.name="sss";
        boolean b2 = u3.equals(u4);
        System.out.println(b2);
    }
}

其他:

java:String使用equals和==比较的区别