A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么要覆盖呢?

4 个回复

正序浏览
关于这几个方法,api中的常规协定规定所有Object子类必须实现以上方法的重写,以保证其子类的相关方法的有效性
回复 使用道具 举报
拿HashSet来说,它的底层数据结构是哈希表,集合中的元素不能重复。判断的依据是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。当存储元素自身不具备比较性时就需要让集合自身具备比较性,所以要
复写两个方法,给出所要求的元素唯一性的判断方式。
回复 使用道具 举报
toString()是当你想打印对象的时候用的,若不覆盖,你调用println()打印对象时会返回一堆内存地址。
equals()和hashCode()是在HashMap中用的,用来确定俩个对象是否相同
回复 使用道具 举报
tostring方法一般是在输出累的时候使用的比如说system.out.print方法的时候会自动调类的tostring方法,默认的话直接返回类的地址,你如果想要输出累的内容的话需要重写这个方法来达到要求,equals方法也是这个意思主要是你想比较两个对象是否相等的时候用到,默认的话是直接比较两个类的地址,比如你new两个对象a、b使用equals方法是返回的是不相等因为他们在内存中的地址是不同,假设类中有x、y两个int参数你规定如果x、y相等的情况说明a、b相同,你就需要重写这个方法了,至于说hashcode这个方法一本不会重写的,很少会用到,一般如果重写的话也会使用其他已经写过的累的hashcode方法来弄一下,这个一般也是在比较的时候才会用到的,具体的我就不太清楚了还得查资料,只是了解过这个东西,实在是没用到过
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马