java中有两种相等的判断-----“==”和“equals()方法”。大部分书上都会告诉我们,“==”是判断两个对象的引用是否相等,而“equals()”是判断两个对象是否相等。其中“==”很好理解,在此我就不再赘述了。我主要想说的是关于“equals()”,在java的Object类中“equals()”的实现如下:
1 public boolean equals(Object obj) {
2 return (this == obj);
3 }
我们可以看到在Object中“equals()”的实现指示简单的使用了“==”也就是之判断了,两个对象的引用相等。这也就是为什么我们在使用“equals()”时必须重写这个方法的原因了。
在jdk的帮助文档中,对于“equals()”和“HashCode()”有这样的说法,如果两个对象使用equals()返回为true,则使用HashCode()必然返回的值必然相等,反之则不一定啊。
为什么呢?其实举个简单的例子,我们有很多桶,每个桶都可以放很多对象,那么HashCode()得到的值就是每个桶的编号,这样说也许您就明白了为什么jdk会有这样的说法了。至于为什么会有这样的设计,学过数据结构的朋友一定知道一些查找的方法吧,其中二分法就是一种高效的查找方法吧。那么HashCode也就是个“多分法”吧。
posted on 2008-02-08 16:05
alec的工作室 阅读(488)
评论(0) 编辑 收藏 所属分类:
java