我有一个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());
}
答案 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。