如何在java中检查两个用户定义的对象

时间:2012-08-28 05:44:26

标签: java string

我有一个类,我想比较该类的两个对象。有什么办法吗? 比较两个用户定义的对象。我不想手动做。

public class NewClass {

    private String name;
    private String surnamename;
    private String address;

    public NewClass(String name)
    {
        this.name = name;
    }

    public NewClass(String name, String surname, String address)
    {
        this.name = name;
        this.surnamename = surname;
        this.address = address;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSurnamename() {
        return surnamename;
    }
    public void setSurnamename(String surnamename) {
        this.surnamename = surnamename;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

我想比较这个类的两个对象。我怎么能做到这一点?

NewClass newClass1 = new NewClass("kshitij", "solanki", "nadiad");      
NewClass newClass2 = new NewClass("kshitij", "solanki", "nadiad");

    String s1 = new String("kshitij");
    String s2 = new String("kshitij");

    NewClass s3 = new NewClass("kshitij");
    NewClass s4 = new NewClass("kshitij");

    System.out.println(s1.hashCode());
    System.out.println(s2.hashCode());

    System.out.println(s3.hashCode());
    System.out.println(s4.hashCode());

    System.out.println(newClass1 == newClass2);
    System.out.println(newClass1.toString() == newClass2.toString());
    System.out.println(newClass1.toString().equals(newClass2.toString()));

3 个答案:

答案 0 :(得分:2)

您希望实施equalshashCode,例如

public boolean equals(final Object other) {
  if (other instanceof NewClass) {
    final NewClass _other = (NewClass) other;
    return name.equals(_other.name)
      && (surname == null && surname == _other.surname
        || surname.equals(_other.surname))
      && (address == null && address == _other.address
        || address.equals(_other.address));
  } else {
    return false;
  }
}

public int hashCode() {
  return name.hashCode() * 961
    + (surname == null ? 0 : surname.hashCode()) * 31
    + (address == null ? 0 : address.hashCode());
}

现在,您可以通过语义比较NewClass个实例,例如

/* they are equal */
assert new NewClass("A", "B", "C").equals(new NewClass("A", "B", "C"));

答案 1 :(得分:1)

这是equals()hashcode()方法的用途。

覆盖equals()

中的hashcode()NewClass方法

equals()方法内部编码您的相等条件并使用相同的变量进行hashcode()计算。

答案 2 :(得分:1)

您可以使用equals()方法。

该方法可在java.lang.Object

中找到

此方法主要用于比较两个对象。

此方法可以为特殊目的而重写。

并且该方法基本上返回boolean值。