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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一个人旅行 中级黑马   /  2013-12-23 01:26  /  1041 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

equals方法,我怎么才能准确的知道什么时候去重写它呢,今天又遇到个要重写的,老师说要重写我怎么就想不到呢,,,什么时候应该想到去重写啊。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

6 个回复

倒序浏览
每一个java类都继承自Object类,equals()是Object类中提供的方法之一。这是equals()在Java中的原代码:

public boolean equals(Object obj)
{
  return (this == obj);
}

可以看出,只有当一个实例等于它本身的时候,equals()才会返回true值。通俗地说,此时比较的是两个引用是否指向内存中的同一个对象,也可以称做是否实例相等。而我们在使用equals()来比较两个指向值对象的引用的时候,往往希望知道它们逻辑上是否相等,而不是它们是否指向同一个对象。在这样的情况下,如果超类也没有重写equals()以实现期望的行为,这时就需要重写equals方法。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

回复 使用道具 举报
Object类中的equals方法比较的是两个对象的内存地址,当你不想用Object类给你提供的equals方法时,就需要你自己去重写这个方法,去定义你自己想实现的equals方法

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 不够详细

查看全部评分

回复 使用道具 举报
应该根据程序的逻辑决定是否重写,如果相等的要求指同一个内存对象,就不用重写,但如果是语义上的相等,就需要重写。比如 Set 的 equals 方法要求当比较的对象也为 Set 类型、包含相同数目的元素且原集合包含比较集合中的所有元素时返回 true (Returns true if the specified object is also a set, the two sets have the same size, and every member of the specified set is contained in this set),因此如果要自己实现一个 Set 类型的集合,就需要重写 equals 方法。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
首先,你要搞明白什么是重写,为什么需要重写,这些问题都明白了,你就知道何时重写了
回复 使用道具 举报
L_t 中级黑马 2013-12-25 10:02:36
地板
所有子类都要重写Object的equals方法的 ,不然你输出的对象就是域名+@+哈希地址值了。所以一般在创建类的时候先把复写的都写全了,以后用不用都不会出错的啊
回复 使用道具 举报
Zenith 中级黑马 2013-12-25 11:11:10
7#
就记住都重写,有默认重写和自己手动写的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马