如何比较同一豆子的两个对象,看看差异

时间:2014-02-21 05:46:24

标签: java equals

我有一个bean类说User.java

class User{
String a;
String b
String c;
...
}

我如何在代码中使用它,

function foo1(){

User u = new User();
//Getting data from DB and adding it to user class say
u.setA("a");
u.setC("c");
foo2(u)
}


function foo2(User u){

User u1 = new User();
//Getting data from another DB and adding it to user class say
u1.setA("a");
u1.setB("b");

//Compare it here,
Boolean status = u1.equals(u);
u1.toString().equals(u.toString());
}

我注意到u1.equals(u);返回true而u1.toString().equals(u.toString())返回false,

任何人都可以解释一下,两种比较之间有什么区别,哪种比较好。我只需要比较两个bean是否相同(就数据而言)。

如果我使用u1 == u ... ??? 提前谢谢。

修改

public String toString() {
    return this.getA() + "\t" + this.getB() + "\t" + this.getC() + "\t";
}

private boolean equals(String a, String b) {
    // check for both being null
    if (a == null && b == null)
        return true;
    // check for only one of them to be null
    if ((a == null && b != null) || (a != null && b == null))
        return false;
    // check for equals()
    return a.trim().equals(b.trim());
}

public boolean equals(User user) {
    return equals(this.a, user.getA()) && equals(this.b, user.getB())
            && equals(this.c, user.getC());
}

1 个答案:

答案 0 :(得分:1)

调用==是一个参考比较,即使用内存位置来决定相等性。如果两者都不包含相同的引用,则返回false。

在对象实例上调用equals将在该类中使用equals的实现;如果它没有覆盖默认值的那个,它将回退到Object中的通用名称。这是docs

中的Object.equals说明
  

类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。

简而言之,如果您没有实现自己的equals方法,您将获得默认行为,其行为与==类似。有关编写自己的equals方法的详细信息,请查看此very comprehensive community wiki