0

我有一个班级,我想比较该班级的两个对象。有什么方法可以比较两个用户定义的对象。我不想手动做。

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()));
4

3 回答 3

2

你想实现equalsand hashCode,例如

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"));
于 2012-08-28T05:50:04.523 回答
1

这就是目的equals()hashcode()方法。

覆盖equals()hashcode()方法NewClass

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

于 2012-08-28T05:45:32.193 回答
1

你可以使用equals()方法。

该方法可用于java.lang.Object

此方法基本上用于比较两个对象。

可以出于特殊目的重写此方法。

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

于 2012-08-28T06:29:31.930 回答