重写的equals()和hashCode()是如何被调用的?

Sheh伟伟 2012-02-19 01:19:32
在一段代码中,也没看见调用equals()和hashCode()方法的语句,但是在实际的运行结果中重写的这两个方法的代码却运行了。比如,重写的toString()方法,书上有写是在System.out.println();语句执行的时候调用的。那么这两个方法是怎么调用的?什么时候调用的?请高手指点下。。。谢谢!!!
...全文
360 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sheh伟伟 2012-03-01
  • 打赏
  • 举报
回复
关于找源代码的这个问题终于解决了。
如果直接在src.zip里找你需要的源代码真有点大海捞针的感觉,但是有一种方法是非常方便的。
我一同学告诉我用eclipse能很快的找出你所需要的源代码。
有兴趣的可以试试。。。。
唉,是该结贴了。谢谢各位的热心解答!!!
BadPattern 2012-02-23
  • 打赏
  • 举报
回复
相当于回调函数了,你实现了函数,由系统来调用,又因为这两个方法是Object类中的,系统就可以直接调用了.
jdk安装目录下有一个src.zip就是源代码.
Sheh伟伟 2012-02-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qmx_zhq 的回复:]

设计对象比较时会调用equals()方法。equals()又会调用hasCode()方法。(建议看看源码)
重写equals();,必须重写hasCode();方法。
[/Quote]

怎么看源代码呀?我找了一下在JDK里没找到。能不能拜托一下把equals()和hashCode()以及Object类源代码的路径给我一下。
proorck6 2012-02-21
  • 打赏
  • 举报
回复
在其他函数里调用了你说的那两个方法了呗
看看源代码吧,里边有不少提示。
AlanZhang 2012-02-20
  • 打赏
  • 举报
回复
设计对象比较时会调用equals()方法。equals()又会调用hasCode()方法。(建议看看源码)
重写equals();,必须重写hasCode();方法。

MiceRice 2012-02-19
  • 打赏
  • 举报
回复
问题太大,无法穷举。

比如涉及到字符串运算相关的,多半会toString();
涉及比较的运算相关的,多半会equals();


此外,我认为你误解了书的意思,这个调用不是自动发生的,也不是什么隐式调用,如果你能看看System.out.println() 这个函数的源码就很清楚了:

public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
// 然后关于 String.valueOf()
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}

它就是有个参数为Object的println()函数,这里面才去做了toString()转换。

62,614

社区成员

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

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