日期:2014-05-20  浏览次数:20772 次

重写的equals()和hashCode()是如何被调用的?
在一段代码中,也没看见调用equals()和hashCode()方法的语句,但是在实际的运行结果中重写的这两个方法的代码却运行了。比如,重写的toString()方法,书上有写是在System.out.println();语句执行的时候调用的。那么这两个方法是怎么调用的?什么时候调用的?请高手指点下。。。谢谢!!!

------解决方案--------------------
问题太大,无法穷举。

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


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

    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();
    }

------解决方案--------------------
设计对象比较时会调用equals()方法。equals()又会调用hasCode()方法。(建议看看源码)
重写equals();,必须重写hasCode();方法。


------解决方案--------------------
在其他函数里调用了你说的那两个方法了呗
看看源代码吧,里边有不少提示。
------解决方案--------------------
相当于回调函数了,你实现了函数,由系统来调用,又因为这两个方法是Object类中的,系统就可以直接调用了.
jdk安装目录下有一个src.zip就是源代码.