Java:检查同一个类的两个对象是否具有相同的值

时间:2014-04-30 10:02:59

标签: java

我想知道如何检查同一个类中的两个对象在每个属性中是否具有相同的值。

例如:

public class Person {
String name;
String surname;
String country;
int age;    

public Person(String name, String surname, String country, int age) {
    this.name = name;
    this.surname = surname;
    this.country = country;
    this.age = age;
}

public boolean samePerson(Person person){
    //CODE
}


Person person1 = new Person("Abel", "Smith", "EEUU", 26);
Person person2 = new Person("Alexa", "Williams", "Canada", 30);
Person person3 = new Person("Abel", "Smith", "EEUU", 26);
Person person4 = new Person("Alexa", "Williams", "EEUU", 30)


person1.samePerson(person2) // return false
person1.samePerson(person3) // return true
person2.samePerson(person3) // return false
person2.samePerson(person4) // return false

我唯一能想到的就是一对一地比较属性。有更简单的方法吗?

抱歉我的英文

提前致谢

6 个答案:

答案 0 :(得分:5)

  

我唯一能想到的就是一对一地比较属性。有更简单的方法吗?

不幸的是没有。你必须编写代码才能做到这一点。如果您这样做,请考虑将该代码放在equalshashCode方法中。

答案 1 :(得分:3)

没有更简单的方法。你必须实现自己的方式,因为它是你自己创造的一个类。

你有一个良好的开端。您可以使用samePerson()方法提供此功能 功能,或者像@Thilo所说,使用equalshashCode方法。

应该遵循:

public boolean samePerson(Person person){
   return this.name.equals(person.name) &&
          this.surname.equals(person.surname) &&
          this.country.equals(person.country) &&
          this.age == person.age;
}

可能有一些理智的空检查以及你需要的任何其他内容。

答案 2 :(得分:0)

正确的答案是使用equals()和hashCode(),但如果您正在寻找其他内容,您可以考虑为每个人引入ID - 可能是社会安全号码。然后可以在public boolean isSamePersonAs(Person person)中实现人员的比较,并仅比较

答案 3 :(得分:0)

您需要指定必须如何比较对象

并正确比较实现哈希码方法。

代码如下所示,在您的课程中添加此内容,您将获得所需的o / p。

@Override
    public int hashCode() {
        int prime=31;
        int sum = prime*this.name.hashCode();
        sum=sum+this.surname.hashCode();
        sum=sum+this.country.hashCode();
        sum=sum+this.age;
        return sum;
    }

@Override
    public boolean samePerson(Object p) {
    if(p==null)
        return false;
    if(! (p instanceof Person))
        return false;
    Person person = (Person)p;

        return this.name.equals(person.name) && this.surname.equals(person.surname) && this.country.equals(person.country) && this.age == person.age;
    }

答案 4 :(得分:-2)

人们尝试这个,我猜它会对你有用

***********这是第一类"人物" *********

public class Person {
String name;
String surname;
String country;
int age;    

public Person(String name, String surname, String country, int age) {
    this.name = name;
    this.surname = surname;
    this.country = country;
    this.age = age;


  }


}

********这是主要班级*******

public class mainclass {

    public static void main(String arg[])
    {
        Person person1 = new Person("Abel", "Smith", "EEUU", 26);
        Person person2 = new Person("Alexa", "Williams", "Canada", 30);
        Person person3 = new Person("Abel", "Smith", "EEUU", 26);
        Person person4 = new Person("Alexa", "Williams", "EEUU", 30);
        System.out.println(samePerson(person1,person2)); 
        System.out.println(samePerson(person1,person3)); 
        System.out.println(samePerson(person2,person4)); 
        System.out.println(samePerson(person3,person4)); 
        System.out.println(samePerson(person1,person4)); 

    }
    static boolean samePerson(Person personA,Person personB)
    {    
      if(personA.name.equals(personB.name) && personA.country.equals(personB.country)&& personA.surname.equals(personB.surname )&& personA.age==personB.age )
         return true;  
      else
    return false;

   }
}

谢谢和问候。

答案 5 :(得分:-3)

通常你会为每个领域使用getter。你应该在这里使用通用的方法,并通过每个实例的反射调用所有的getter,之后用equals进行比较。

@Edit 见这里:Java Reflection: How can i get the all getter methods of a java class and invoke them

在这里:http://tutorials.jenkov.com/java-reflection/getters-setters.html