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语句开始执行?