Object类的equals方法和hashCode方法之间有什么关系?

Hesperbugs 2004-01-24 04:23:22
Object类的equals方法是根据hashCode方法返回的散列码判断两个对象的等同性的吗?散列码是怎么生成的,有什么用?跟equals有什么关系?请高手赐教。
...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hesperbugs 2004-01-27
  • 打赏
  • 举报
回复
to alienbat(死灵巫师) : 谢了
swinging 2004-01-27
  • 打赏
  • 举报
回复
laugh alienbat(死灵巫师) ( )

这种问题,要我解释绝对不如跑去看文档,我就算解释也没有文档精确,至多是把文档搬过来。看了你的解释,我劝你还是不要误人的好,太片面了。

另外,楼主连手边的文档都懒得翻,非要跑到这里来浪费人时间精力给解释,进步太难。
好比楼主眼前一碗粥,自己都过10岁了还非要人喂,
我说:自己动手吃。
居然有人跳出来说:你20多岁的年龄都长哪里去了?连喂下都不会,要他自己动手。

sign

希望楼主自己体会,以后碰到这种问题,到底要怎么处理,是还等人喂?还是自己动手。
alienbat 2004-01-26
  • 打赏
  • 举报
回复
楼上的,你5个三角就是用“看文档”这样的回答混来的吗?

答案:
没有任何关系。但在实现上有共同之处。
在Object类中:
equals方法的实现与"=="运算符的作用是一样的。当且仅当两个Object引用指向同一个地址时,返回true。

hashCode返回的int值与本对象内存地址有关。也就是:当且仅当两个Object引用指向同一个地址时,返回相同的hashCode。
swinging 2004-01-26
  • 打赏
  • 举报
回复
建议直接看JDK DOC中相关文档。
xianliti 2004-01-26
  • 打赏
  • 举报
回复
在Think in Java 中有重点介绍hashcode和equals的部分
leeak 2004-01-25
  • 打赏
  • 举报
回复
equals 是用来 比较2个对象的内容的
danceflash 2004-01-25
  • 打赏
  • 举报
回复
楼上例子有误
String a="123";
String b=a;
String c="123";
在这种情况下,a==b,a==c,a.equals(c) 均为真

应该为:
String a = "123";
String b = a;
String c = new String("123");
那么 a == b 真,a == c 假,a.equals(c) 真
lapwing2002 2004-01-24
  • 打赏
  • 举报
回复
equals是用来比较对象的内容是不是相等
==是用来比较两个引用所指向的对象是不是一个,也就是比较内存地址是不是相同
例如
String a="123";
String b=a;
String c="123";
那么 a==b 真,a==c 假,a.equals(c) 真

至于hashCode是用来将对象放入象Hashtable 之类的容器时使用的,Hashtable 会根据所放入对象的hashCode值来选择不同的Bucket,如果该对象没有提供重写hashCode方法,那么会使用Object类缺省的hashCode方法,即根据其内存地址来计算(这通常不是我们需要的),所以如果希望自己的对象能够正确的放入Hashtable 之类的容器,那么要重写hashCode方法
Hesperbugs 2004-01-24
  • 打赏
  • 举报
回复
equals的默认判断相等的原则是什么?好象跟"=="不一样.
rainight 2004-01-24
  • 打赏
  • 举报
回复
不是。equals可以被你自己重载,你可以编写任何判断相等的原则,默认情况下,是递归比较成员对象依次是否相等。
散列码就是hashCode,是根据hash算法生成的。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧