为了账号安全,请及时绑定邮箱和手机立即绑定

改写equals方法后,对象为什么能精确的使用真正需要的if语句,附有代码,万分感谢!

public abstract class Animal {

    private int age;
    
    public abstract void eat();
    
    public int getAge(){
        return age;
    }
    
    public void setAge(int age){
        this.age=age;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj){
            System.out.println("第一条语句执行了。");
            return true;
        }
        if (obj == null){
            System.out.println("第二条语句执行了。");
            return false;
        }
        if (getClass() != obj.getClass()){
            System.out.println("第三条语句执行了");
            return false;
        }
        {
            System.out.println("第四条语句执行了");
            Animal other = (Animal) obj;
            if (age != other.age)
                return false;
        }
        {
            System.out.println("第五条语句执行了");
        return true;
        }
    }
}
——————————————————————————————————————————
public class Dog extends Animal {

    public void eat() {}
}
——————————————————————————————————————————————
public class Test {

    public static void main(String[] args) {
        Dog dog1 = new Dog();
        Dog dog2 = new Dog();
        dog1.setAge(1);
        dog2.setAge(2);
        String name="tom";
        Dog dog4=dog2;
        Dog dog3=null;
        System.out.println(dog1.equals(dog2));
        System.out.println(dog1.equals(dog3));
        System.out.println(dog1.equals(name));
        System.out.println(dog4.equals(dog2));
    }
}
——————————执行结果------------------------------------
第四条语句执行了
false
第二条语句执行了。
false
第三条语句执行了
false
第一条语句执行了。
true
-------------------------------------------------------
可以看到,我一共调用了4次equals方法。在Animal类的equals方法中一共有4种if语句。
为什么每次调用equals方法,都会精确的调用需要的if语句,而不是从第一个if语句开始执行?


正在回答

3 回答

啊啊啊?我理解你的问题,回答一下:程序不是精确的执行了if语句,是从第一条执行的,只是条件不符合而已(条件不符合,臣妾做不到哇。。。)

0 回复 有任何疑惑可以回复我~
#1

七九九 提问者

对对!输出放错了地方不执行。非常感谢!
2016-02-27 回复 有任何疑惑可以回复我~

是一个个判断过来的,最后执行符合条件的

0 回复 有任何疑惑可以回复我~
#1

七九九 提问者

谢谢,我知道原因了。
2016-02-27 回复 有任何疑惑可以回复我~

前面三次调用,比较的dog地址都不同,都不满足第一个if条件,当然没有执行

0 回复 有任何疑惑可以回复我~
#1

七九九 提问者

非常感谢!
2016-02-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

改写equals方法后,对象为什么能精确的使用真正需要的if语句,附有代码,万分感谢!

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号