等于方法不正常[已解决]

时间:2017-06-21 02:46:35

标签: java

public  boolean equals(Object o)
{
    boolean result = false;
    if(o!=null && o instanceof Person)
    {

        Person anotherperson = (Person) o;
        if(this.getName() == anotherperson.getName() && this.getCal() == anotherperson.getCal())
        {
            result = true;  
        }

    }
    return result;
}

public int hashCode()
{
    return getName().hashCode() ^ getCal().hashCode();
}

} /////////////////////// 我需要发生的是相等的方法将比较输入的值是相同还是不相同,现在它显示不相同,无论我改变什么,似乎是一个问题,在布尔等于comapring 2个对象。

2 个答案:

答案 0 :(得分:0)

字符串和MyDate是对象,您需要使用equals()而不是==来比较它们。

public boolean equals(Object o) {
    boolean result = false;
    if (o instanceof Person) {
        Person other = (Person) o;
        if (this.getName().equals(other.getName())
              && this.getDob().equals(other.getDob())) {
            result = true;
        }

    }
    return result;
}

请注意,此equals()实施尚未正确解决namedobnull的情况。

答案 1 :(得分:0)

在班级中,将您的equals方法更改为:

public boolean equals(Object o) {
    boolean result = false;
    if (o != null && o instanceof Person) {

        Person anotherperson = (Person) o;
        if (this.getName().equals(anotherperson.getName()) && this.getDob().equals(anotherperson.getDob())) {
            result = true;
        }

    }
    return result;
}

如上所述,您需要使用equals而不是==来比较String对象。

修改

您只需要在main方法中解析args数组。

将您的TestPerson类更改为:

public class TestPerson {

    public static void main(String args[]) {

        String name1 = args[0];
        String[] date1 = args[1].split(", ");
        String name2 = args[2];
        String[] date2 = args[3].split(", ");
        Person p1 = new Person(name1, new MyDate(Integer.valueOf(date1[0]), Integer.valueOf(date1[1]), Integer.valueOf(date1[2])));
        Person p2 = new Person(name2, new MyDate(Integer.valueOf(date2[0]), Integer.valueOf(date2[1]), Integer.valueOf(date2[2])));

        if (p1.equals(p2)) {
            System.out.println("Identical");
            System.out.println(p1);
            System.out.println(p2);
        } else {
            System.out.println("Not Identical");
            System.out.println(p1);
            System.out.println(p2);
        }
    }
}

请注意,输入应使用引号。例如,“Jose”,“1,1,2000”。我假设您的日期格式与我上面的示例完全相同。