java hashCode

" hashcode是一种编码方式,在Java中,每个对象都会有一个hashcode,Java可以通过这个hashcode来识别一个对象。"
我的理解hashcode是对象的哈希值(
简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致
)
 
转载地址:http://blog.csdn.net/fenglibing/article/details/8905007
 
看以下的运行错误代码:
import java.util.HashSet;
import java.util.Set;

public class HashTest {
	private int i;
	
	public int getI() {
		return i;
	}
	
	public void setI(int i) {
		this.i = i;
	}
	
	public int hashCode() {
		return i % 10;
	}
	
	public static void main(String[] args) {
		HashTest a = new HashTest();
		HashTest b = new HashTest();
		
		a.setI(1);
		b.setI(1);
		
		Set<HashTest> set = new HashSet<HashTest>();		
		set.add(a);
		set.add(b);
		
		System.out.println(a.hashCode() == b.hashCode());
		System.out.println(a.equals(b));
		System.out.println(set);						
	}	
}
结果为:
true        //本来不应该相等的?//不是
false      
[com.xinhua.HashTest@1, com.xinhua.HashTest@1] //本来只能添加到集合中一个元素的,现在a和b都加入了。这是不正确的
以上的代码
 
以上这个示例,我们只是重写了hashCode方法,从上面的结果可以看出,虽然两个对象的hashCode相等,但是实际上两个对象并不是相等;我们没有重写equals方法,那么就会调用object默认的equals方法,是比较两个对象的引用是不是相同,显示这是两个不同的对象,两个对象的引用肯定是不定的。
这里我们将生成的对象a和b放到了HashSet中,而HashSet中只能够存放唯一的对象,也就是相同的(适用于equals方法)的对象只会存放一个,但是这里实际上是两个对象a,b都被放到了HashSet中,这样HashSet就失去了他本身的意义了。
所以必须重写equals方法
即加上如下equals方法(重写Object类的equals方法)
public boolean equals(Object object) {
		if (object == null) {
			return false;
		}
		if (object == this) {
			return true;
		}
		if (!(object instanceof HashTest)) {
			return false;
		}
		HashTest other = (HashTest) object;
		if (other.getI() == this.getI()) {
			return true;
		}
		return false;
		
	}
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值