Equals与hasCode

关于重写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保存对象中把相同的对象又进行持久化。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值