黑马程序员技术交流社区
标题:
什么时候要覆盖toString()、equals()、hashCode()方法??
[打印本页]
作者:
党传才
时间:
2012-3-27 11:13
标题:
什么时候要覆盖toString()、equals()、hashCode()方法??
为什么要覆盖呢?
作者:
1002865186
时间:
2012-3-27 11:19
tostring方法一般是在输出累的时候使用的比如说system.out.print方法的时候会自动调类的tostring方法,默认的话直接返回类的地址,你如果想要输出累的内容的话需要重写这个方法来达到要求,equals方法也是这个意思主要是你想比较两个对象是否相等的时候用到,默认的话是直接比较两个类的地址,比如你new两个对象a、b使用equals方法是返回的是不相等因为他们在内存中的地址是不同,假设类中有x、y两个int参数你规定如果x、y相等的情况说明a、b相同,你就需要重写这个方法了,至于说hashcode这个方法一本不会重写的,很少会用到,一般如果重写的话也会使用其他已经写过的累的hashcode方法来弄一下,这个一般也是在比较的时候才会用到的,具体的我就不太清楚了还得查资料,只是了解过这个东西,实在是没用到过
作者:
李井山
时间:
2012-3-27 11:19
toString()是当你想打印对象的时候用的,若不覆盖,你调用println()打印对象时会返回一堆内存地址。
equals()和hashCode()是在HashMap中用的,用来确定俩个对象是否相同
作者:
izwj
时间:
2012-3-27 11:22
拿HashSet来说,它的底层数据结构是哈希表,集合中的元素不能重复。判断的依据是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。当存储元素自身不具备比较性时就需要让集合自身具备比较性,所以要
复写两个方法,给出所要求的元素唯一性的判断方式。
作者:
刘蕴学
时间:
2012-3-27 11:49
关于这几个方法,api中的常规协定规定所有Object子类必须实现以上方法的重写,以保证其子类的相关方法的有效性
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2