关于重写Equals方法
equals用来按照自己的规则判断两个对象是否相等,而重写了equals后,按照java的惯例,就需要重写hashCode。如果没有重写equals方法,则二个对象比较的是地址。
DEMO:
User.java
public class User {
private Integer id;
public User() {
super();
}
public User(Integer id) {
super();
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
测试:
@Test
public void testNoEquals(){
User user1 = new User(1);
User user2 = new User(1);
//如果没有重写,默认equals是比较地址
System.out.println(user1.equals(user2));//不相等
}
结果为false,因为比较的是结果。
在User对象中再添加Equals方法(参考myeclipse通过hibernate revenge生成的po类中写法):
public boolean equals(Object other) {
if (this == other)
return true;
if (other == null)
return false;
if (!(other instanceof User))
return false;
User user = (User) other;
return (user.getId().equals(this.getId()));
}
public int hashCode() {
int result = 17;
result = 37
* result
+ (getId() == null ? 0 : this.getId()
.hashCode());
return result;
}
如此则上面测试结果为true.
hibernate中重写equals方法原因是,避免set保存对象中把相同的对象又进行持久化。