equals(Object o)和equals(Name o)之间有什么有意义的区别吗?如果是,它有什么含义?

时间:2016-03-19 12:35:38

标签: java parameters equals comparable

我看到了两个不同版本的代码,一个来自Java Oralce,另一个来自Youtube。两个版本之间的唯一区别是equals()方法的参数类型。其中一个是equals(Object o),而另一个是equals(Name o)。我只是想知道两个版本之间是否有任何有意义的区别?如果是的话,它有什么含义?感谢您提供的任何帮助!

public class Name implements Comparable<Name> {
    private final String firstName, lastName;

    public Name(String firstName, String lastName) {
        if (firstName == null || lastName == null)
            throw new NullPointerException();
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String firstName() { return firstName; }
    public String lastName()  { return lastName;  }

    public boolean equals(Object o) {
        if (!(o instanceof Name))
            return false;
        Name n = (Name) o;
        return n.firstName.equals(firstName) && n.lastName.equals(lastName);
    }

    public int hashCode() {
        return 31*firstName.hashCode() + lastName.hashCode();
    }

    public String toString() {
    return firstName + " " + lastName;
    }

    public int compareTo(Name n) {
        int lastCmp = lastName.compareTo(n.lastName);
        return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
    }
}

1 个答案:

答案 0 :(得分:3)

equals(Object o)会覆盖Object的{​​{1}}方法,而equals则不会。因此,如果equals(Name o)类与某些使用Name的{​​{1}}的类(例如Objectequals等等)一起使用,则如果要覆盖如何确定两个对象是否彼此相等的默认逻辑,则应实现HashSet<Name>(默认行为是ArrayList<Name>如果equals(Object o))。

例如,如果实现a.equals(b),则以下代码将生成输出a==b(因为根据2的默认实现,这两个对象添加到equals(Name o)如果equals(Object o)在您的代码示例中实现,那么Set1(因为根据您equals(Object o)的实现,这两个对象被添加到equals(Object o)彼此相等,Set可以防止重复。)

HashSet