比较对象及其成员变量

时间:2014-01-22 10:40:24

标签: java java-ee compare

假设我有两个相同类的对象,例如:

public class Example {
    String name;
    String rollNo;
    String address;
    String phoneNo;
    String city;
}

Example obj1 = new Example();
    obj1.name = "Name";
    obj1.rollNo = "10";
    obj1.address = "Address";
    obj1.phoneNo = "Phone Number";
    obj1.city = "City";

Example obj2 = new Example();
    obj2.name = "Name";
    obj2.rollNo = "10";
    obj2.address = "Address";
    obj2.phoneNo = "Phone Number";
    obj2.city = "City";

在这里,我想比较obj1obj2这个问题我不想用if条件获取,即获取obj1的每个成员变量然后将其与{{进行比较1}}变量。

obj2类的

equals方法在此处不起作用,因为它会比较对象引用。

我的问题是,是否有任何Java API可以比较两个对象及其成员变量。

2 个答案:

答案 0 :(得分:3)

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Example other = (Example) obj;
        if (address == null) {
            if (other.address != null)
                return false;
        } else if (!address.equals(other.address))
            return false;
        if (city == null) {
            if (other.city != null)
                return false;
        } else if (!city.equals(other.city))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (phoneNo == null) {
            if (other.phoneNo != null)
                return false;
        } else if (!phoneNo.equals(other.phoneNo))
            return false;
        if (rollNo == null) {
            if (other.rollNo != null)
                return false;
        } else if (!rollNo.equals(other.rollNo))
            return false;
        return true;
    }

将此等于函数粘贴到您的exmaple类中,然后比较这样的对象:

 if(obj1.equals(obj2)) {  //will return true now

 }

答案 1 :(得分:1)

在Java中,有三种比较对象的替代方法:

  1. 通过覆盖Object.equals()方法。
  2. 使用通用java.util.Comparator界面
  3. 使用java.lang.Comparable界面
  4. 查看此questionthis链接了解详情。