0

在这段代码中,我接收了两个对象,因为我想比较三个不同的对象(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 的信息: 姓名:Allison 地址:6600 Crescent Ave 年龄:32 电话号码:4231421

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

第 3 人的信息: 姓名:George 地址:5251 Lakewood St 年龄:24 电话号码:4489216

人 1 和人 2 并不相同。

人 1 和人 3 并不相同。

人 2 和人 3 并不相同。

过程完成。

4

1 回答 1

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确保您的方法确实覆盖了某些内容。
于 2013-06-28T05:35:53.117 回答