0

クラスが 1 つあり、そのクラスの 2 つのオブジェクトを比較したい。2 つのユーザー定義オブジェクトを比較する方法はありますか。手動でやりたくない。

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;
    }
}

このクラスの 2 つのオブジェクトを比較したいと思います。どうすればこれを達成できますか?

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

equalsとを実装したい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()

メソッドはで利用可能ですjava.lang.Object

このメソッドは、基本的に 2 つのオブジェクトを比較するために使用されます。

このメソッドは、特別な目的のためにオーバーライドできます。

メソッドは基本的にboolean値を返します。

于 2012-08-28T06:29:31.930 に答える
1

それがメソッドequals()hashcode()メソッドの目的です。

のオーバーライドequals()hashcode()メソッドNewClass

メソッド内で等価条件をコード化し、 hashcode()計算にもequals()同じ変数を使用します。

于 2012-08-28T05:45:32.193 に答える