class Person
{
int age;
String name;
};
class objectEquals 
{
public static void main(String[] args) 
{
Person p1=new Person();
Person p2=new Person();
if (p1==p2)
{
System.out.println("p1,p2指向同一个对象");
}
else if (p1!=p2)
{
System.out.println("p1,p2指向不同的对象");
}
p1.name="xx";
p2.name="xx";
p1.age=20;
p2.age=20;
        if (p1.equals(p2))
        {
System.out.println("p1,p2所指对象的内容相同");
        }
else //if (p1.equals(p2))
        {
System.out.println("p1,p2所指对象的内容不相同");
        }
//System.out.println("Hello World!");
}
}
//为什么p1,p2内容不相等,明明给的值都相同呀!!

解决方案 »

  1.   

    你没有重写equals方法,调用的是Object对象的equals方法,其操作是直接判断是否==,而2个不同对象用==比较时是不等的,所以出现不等的结果
      

  2.   

    前面用了 == 号,显然,那是两个不同的对象,所以不等。
    后面虽然用了比较方法,但是你没有覆盖实现,所以用的是超类的比较方法,所以很难说等不等。一般也是不等的。如果楼主的意思是:关键属性相等,就认为相等,那么你需要覆盖 equals(Object obj) 方法。
      

  3.   

    以下是Object类的equals的定义:
    public boolean equals(Object obj) {
    return (this == obj);
        }
    我的理解是Object.equals方法是用来比较自己本身的。如果遇到本身没有equals的类,我们应该进行覆盖。
    以下是String的equals:
    public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }//先判断比较的是否为指向同一对象的变量,如果不是则对其内容逐一的比较
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
        if (v1[i++] != v2[j++])
    return false;
    }
    return true;
        }
    }
    return false;
        }