构造函数标识符不适用于三个对象

时间:2013-06-28 05:26:12

标签: java object constructor compare equals

在这段代码中,我接受了两个对象,因为我想将三个不同的对象相互比较(1和2,1和3,2和3),由于某种原因它不会识别对象2和3是相等的

    public boolean equals(Person num1, Person num2) {
    if ((this.name.equals(num1.name))&&(this.address.equals(num1.address))&&
    (this.age==num1.age)&&(this.phoneNumber==num1.phoneNumber))
        return true;
    if ((this.name.equals(num2.name))&&(this.address.equals(num2.address))&&
    (this.age==num2.age)&&(this.phoneNumber==num2.phoneNumber))
        return true;
    else
        return false;

}

下面的演示类

public class PersonDemo {

public static void main(String[] args) {

    //num1, num2, and num3 represent three people
    Person num1, num2, num3;
    num1=new Person("Allison", "6600 Crescent Ave", 32, 4231421);
    num2=new Person("George", "5251 Lakewood St", 24, 4489216);
    num3=new Person("George", "5251 Lakewood St", 24, 4489216);

    //name, address, age and phoneNumber are the parameters used to
    //describe each object (num1, num2, and num3)

    System.out.println("\nInformation of person 1: ");
    System.out.println(num1);

    System.out.println("\nInformation of person 2: ");
    System.out.println(num2);

    System.out.println("\nInformation of person 3: ");
    System.out.println(num3);

    if (num1.equals(num2))
        System.out.println("\nPerson 1 and person 2 are identical.");
    else 
        System.out.println("\nPerson 1 and person 2 are not identical.");
    if (num1.equals(num3))
        System.out.println("\nPerson 1 and person 3 are identical.");
    else 
        System.out.println("\nPerson 1 and person 3 are not identical.");
    if (num2.equals(num3))
        System.out.println("\nPerson 2 and person 3 are identical.");
    else 
        System.out.println("\nPerson 2 and person 3 are not identical.");
}

} 输出: --------------------配置:--------------------

人1的信息: 姓名:艾莉森 地址:新月大道6600号 年龄:32岁 电话号码:4231421

人2的信息: 姓名:乔治 地址:5251 Lakewood St. 年龄:24岁 电话号码:4489216

人3的信息: 姓名:乔治 地址:5251 Lakewood St. 年龄:24岁 电话号码:4489216

第1人和第2人不相同。

第1人和第3人不相同。

第2人和第3人不相同。

流程已完成。

1 个答案:

答案 0 :(得分:1)

好像你想要覆盖Object.equals方法。

public boolean equals(Person num1, Person num2) {
    // ...
}

但是你的签名是不同的。它应该是:

@Override
public boolean equals(Object o) {
    if(!(o instanceof Person))
        return false;
    Person num1 = (Person) o;
    if ((this.name.equals(num1.name))&&(this.address.equals(num1.address))&&
            (this.age==num1.age)&&(this.phoneNumber==num1.phoneNumber))
        return true;
}
  1. 如果要覆盖Object.equals,则必须只有一个类型为Object的参数。
  2. 使用@Override确保您的方法真正覆盖某些内容。