黑马程序员技术交流社区

标题: 关于equals方法的问题 [打印本页]

作者: 一个人旅行    时间: 2013-12-23 01:26
标题: 关于equals方法的问题
equals方法,我怎么才能准确的知道什么时候去重写它呢,今天又遇到个要重写的,老师说要重写我怎么就想不到呢,,,什么时候应该想到去重写啊。
作者: 于磊    时间: 2013-12-23 01:48
每一个java类都继承自Object类,equals()是Object类中提供的方法之一。这是equals()在Java中的原代码:

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

可以看出,只有当一个实例等于它本身的时候,equals()才会返回true值。通俗地说,此时比较的是两个引用是否指向内存中的同一个对象,也可以称做是否实例相等。而我们在使用equals()来比较两个指向值对象的引用的时候,往往希望知道它们逻辑上是否相等,而不是它们是否指向同一个对象。在这样的情况下,如果超类也没有重写equals()以实现期望的行为,这时就需要重写equals方法。
作者: treecolor166    时间: 2013-12-23 07:32
Object类中的equals方法比较的是两个对象的内存地址,当你不想用Object类给你提供的equals方法时,就需要你自己去重写这个方法,去定义你自己想实现的equals方法
作者: zzmxhm    时间: 2013-12-23 10:13
应该根据程序的逻辑决定是否重写,如果相等的要求指同一个内存对象,就不用重写,但如果是语义上的相等,就需要重写。比如 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 方法。
作者: 范晓冲    时间: 2013-12-25 02:20
首先,你要搞明白什么是重写,为什么需要重写,这些问题都明白了,你就知道何时重写了
作者: L_t    时间: 2013-12-25 10:02
所有子类都要重写Object的equals方法的 ,不然你输出的对象就是域名+@+哈希地址值了。所以一般在创建类的时候先把复写的都写全了,以后用不用都不会出错的啊
作者: Zenith    时间: 2013-12-25 11:11
就记住都重写,有默认重写和自己手动写的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2