我看到了两个不同版本的代码,一个来自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));
}
}
答案 0 :(得分:3)
equals(Object o)
会覆盖Object
的{{1}}方法,而equals
则不会。因此,如果equals(Name o)
类与某些使用Name
的{{1}}的类(例如Object
,equals
等等)一起使用,则如果要覆盖如何确定两个对象是否彼此相等的默认逻辑,则应实现HashSet<Name>
(默认行为是ArrayList<Name>
如果equals(Object o)
)。
例如,如果实现a.equals(b)
,则以下代码将生成输出a==b
(因为根据2
的默认实现,这两个对象添加到equals(Name o)
如果equals(Object o)
在您的代码示例中实现,那么Set
是1
(因为根据您equals(Object o)
的实现,这两个对象被添加到equals(Object o)
彼此相等,Set
可以防止重复。)
HashSet