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

标签 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()));

最佳答案

您想要实现 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"));

关于java - 如何在java中检查两个用户定义的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153394/

相关文章:

Java 泛型扩展仍然会生成未经检查的强制转换警告

java - Double to Int 无损精度

java - 如何知道我是否已成功连接到我在 Android 中的拨出号码?

c++ - Stringstream 的 Str 方法将不起作用。 (不同类型的串联)(C++)

php - 将字符串 'true' 或 'false' 转换为整数 '1' 或 '0'

java - 通过 TransportClient 在 java 中使用 Elasticsearch

java - Gradle构建失败

c++ - 在 O(1) 空间限制中反转单词在字符串中的位置而不改变特殊字符的顺序

c++ - 排除一种类型的模板

php - 将带有 HTML/CSS 内容的字符串中的字体大小加倍