`
yanm7788
  • 浏览: 18883 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java equals和hashCode的使用

阅读更多
Object的方法 equals()和hashCode() 是用来判断两个对象是否相等。基础类型判断是否相等时,使用“==”来判断,“==”当用来判断是基础类型是判断内容的,而引用对象是判断内存地址的。
首先equals()和hashcode()这两个方法都是从object类中继承过来的.在不重写的情况下以下条件成立:
1.equals()相等的两个对象,hashcode()一定相等;
2.equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。

public class Test {

	public static void main(String[] args) throws Exception {
		User user1=new User("abc",11);
		User user2=new User("abc",11);;
		System.out.println(user1.equals(user2));
		System.out.println(user1.hashCode());
		System.out.println(user2.hashCode());
	}
	
}
 class User{

	private String userName;
	private int userAge;
	
	public User(String userName, int userAge) {
		super();
		this.userName = userName;
		this.userAge = userAge;
	}

	@Override
	public boolean equals(Object obj)
	{
		if(obj==this)
			return true;
		User user=(User)obj;
		if(userName.equals(user.getUserName()) && userAge==user.getUserAge())
			return true;
		return false;
	}	
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		//return super.toString();
		return "user UserName:"+getUserName()+"UserAge:"+getUserAge();
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	
}
	

结果为true
22068557
29115481
    数据结构的课程大家都会知道有一种结构叫hashtable,目的是通过给每个对象分配一个唯一的索引来提高查询的效率。同样java中也继承了这一观点。而hashcode也就是“哈希码”的作用就是为支持数据结构中的哈希表结构而存在的,换句话说,也就是只有用到集合框架的 Hashtable、HashMap、HashSet的时候,才需要重载hashCode()方法。
如果上面的情况中重写equals方法了请注意重写hascode
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics