有两种方法可以解释“设置对象彼此相等”。
一是你想要的p1
and p3
参考the same目的。就像克拉克·肯特和超人是同一个人的两个名字(参考文献)一样。这将通过以下方式完成:
Person p1 = new Person("Jim");
Person p3 = p1;
在这种情况下,如果发生任何事情p1
,同样的事情也发生在p3
。如果你杀死了克拉克·肯特,你就杀死了超人(因为他们是同一个人)。 Java 判断相等性equals(Object o)
方法 - 两个对象a
and b
相等当且仅当a.equals(b)
and b.equals(a)
return true
。使用基数这两个对象将相等Object
平等的定义,所以你不必担心这个。
另一种解释你的意思的方法是创建一个newperson 对象,它恰好是第一人称的精确副本。为此,您必须向 person 类添加另一个构造函数,该构造函数将 person 作为参数:
public class Person {
private String personName;
public String toString(){
return personName;
}
public Person(String personName){
this.personName = personName;
}
public Person(Person personToCopy){
this.personName = personToCopy.personName;
}
}
通过此设置,您可以在 main.c 中执行您正在执行的操作。
Person p1 = new Person("Bob");
Person p3 = new Person(p1); //Will have name Bob.
为了要做p1
and p3
equal,我们必须教 Person 类使用它的字段来检查相等性。我们可以通过覆盖来做到这一点equals
类人中的方法。
public boolean equals(Object o){
if(! (o instanceof Person)) return false; //a Person can't be equal to a non-person
Person p = (Person) o;
return personName == null && p.personName == null || personName.equals(p.personName);
}
每当我们覆盖equals
方法,最好也覆盖hashcode
方法,它返回一个唯一的int
对于每个对象。由于唯一的字段Person
对象有它的名称,我们可以简单地使用该哈希码。
public int hashCode(){
return personName == null ? 0 : personName.hashCode();
}
总之,我们的 Person 类看起来像这样:
public class Person {
private String personName;
public String toString(){
return personName;
}
public Person(String personName){
this.personName = personName;
}
public Person(Person personToCopy){
this.personName = personToCopy.personName;
}
public boolean equals(Object o){
if(! (o instanceof Person)) return false; //a Person can't be equal to a non-person
Person p = (Person) o;
return personName == null && p.personName == null || personName.equals(p.personName);
}
public int hashCode(){
return personName == null ? 0 : personName.hashCode();
}
}