2017-10-28 79 views
1

因此,在这个类中,我需要创建一个Equals方法来检查两个对象是否具有相同的名称。我试图在类中创建两个对象,只是与“初始化”的构造,但它创建的对象创建一个方法,如果名字和姓氏相同,则认为两个对象相等。

给了一个错误Person.Java

public class Person 
{ 

String firstName = ""; 
String lastName = ""; 
String age = "";  


public Person (String firstName, String lastName, String age){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.age = age; 


} 

public String getFirstName(){ 
return firstName; 

} 

public String getLastName(){ 
return lastName; 

} 

public String getAge(){ 
return age; 

} 

public void setFirstName(String firstName){ 
this.firstName = firstName; 

} 

public void setLastName(String lastName){ 
this.lastName = lastName; 

} 

public void setAge(String age){ 
this.age = age; 

} 

public String toString(){ 
return firstName + " " + lastName + ", " + age + " years old"; 

} 



} 

这里是我的司机,所以基本上我需要一种方法,它们都具有相同的名称并打印出一条消息,说明它们具有相同的名称。我的实验室说它必须在班级而不是司机,这就是为什么我迷路了,考虑到我可以很容易地在司机内做一个if/else语句。

public class PersonDriver 
{ 

    public static void main(String[] args) 
    { 
     Person p1 = new Person("John","Doe", "42"); 
     Person p2 = new Person("John","Doe", "43"); 

     System.out.println(p1); 
     System.out.println(p2); 




    } 

} 
+0

所以,你需要能够做这样的事? 'if(p1.equals(p2)){// do something}' – toastedDeli

回答

1

在Person类中,您必须重写java中每个对象所拥有的equals()方法。作为参数,此方法接受同一类的另一个对象,并将其字段与初始对象的字段进行比较。如果每个对象的字段是相等的,那么它将返回true,而false则相反。这是代码是如何寻找:

public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     Person person = (Person) o; 

     if (firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) return false; 
     if (lastName != null ? !lastName.equals(person.lastName) : person.lastName != null) return false; 
     return age != null ? age.equals(person.age) : person.age == null; 
    } 

UPDATE:为toastedDeli说,方法初始化前添加@Override:

@Override 
public boolean equals(Object o) { 
... 
} 
+1

也可以考虑在此方法声明之上添加@Override。 https://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – toastedDeli

+2

如果你重写equals(),你应该重写hashCode()。 – FredK