读书人

重写的equals()和hashCode()是怎么被调

发布时间: 2012-03-20 14:01:10 作者: rapoo

重写的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就是源代码.

读书人网 >J2SE开发

热点推荐