/*
*比较过程思路:
*1、两个对象指向位置相同,那么他们就相等,return后跳出函数,不再往下执行
*2、指向位置不同,有3情况
*a:这两对象类型相同,并且内容相同,也属于相等
*b:类型相同,内容不同,属于不等;
*c:类型不同,属于不等
*/

class ObjectEquals{
    public static void main(String[]args){
        Person p1 = new Person(4);
        Person p2 = new Person(4);    
        System.out.println(p1.equals(p2));
    }
}

class Person{
    private int age;
    public Person(int age){
        this.age = age;    
    }    
    public boolean equals(Object obj){
        //内存地址相同,返回true不再执行
        if(this == obj)
            return true;
                        
        //位置不同,类型相同    
        if(obj instanceof Person){
            Person p = (Person)obj;//多态,向下转型,父类对象引用子类特有对象时,应向下转型
            return this.age == p.age;
         }
         //位置不同,类型不同,返回false
         else
          return false;         
    }        
}