黑马程序员技术交流社区

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

作者: 魏昂    时间: 2012-3-14 16:21
标题: 关于equals方法
equals方法是定义在Object中的方法,因此是不是每个类都具有equals方法?、如果是,那么equals方法在不同的类中是不是拥有同样的功能和含义呢?
作者: 赵英坤    时间: 2012-3-14 16:28
对呀,不同的类有不同的equals方法,但是objects中的方法不是都适合于这每个类,所以你要使用equals方法的话,要按照类的不同以及你自己的需要重写equals方法就好了
作者: lucky_xingxing    时间: 2012-3-14 16:32
如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果
作者: 泮和顺    时间: 2012-3-14 16:40
一般都要求复写的 如果是完整设计的类的话
作者: 丁佼    时间: 2012-3-14 17:06
默认情况下,使用object类的equals用于比较两个引用是否是指向同一个对象,当引用表示的类中有覆写的equals方法,则调用最新的equals方法,类似于英语中的就近原则。
其他的变量声明也是类似,当有重复的变量或方法名称时,使用在相同定义范围内,距离最近的那个。
作者: 魏昂    时间: 2012-3-14 17:50
赵英坤 发表于 2012-3-14 16:28
对呀,不同的类有不同的equals方法,但是objects中的方法不是都适合于这每个类,所以你要使用equals方法的 ...

但 ,我 曾记得在哪里看到过 equals 在Object与String中的调用中 传递的是不一样的 ,具体又记不清楚了...
作者: 于紫洋    时间: 2012-3-14 17:55
Object类是所有类的父类,别的类都从Object类中继承equals方法,然后一部分类对equals进行了覆写,用到记不清楚的就看API呗
作者: 赵英坤    时间: 2012-3-14 18:42
魏昂 发表于 2012-3-14 17:50
但 ,我 曾记得在哪里看到过 equals 在Object与String中的调用中 传递的是不一样的 ,具体又记不清楚了.. ...

你去查下API,就知道了
java.lang.Object

是这样描述的:

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

作者: 张润政    时间: 2012-3-14 19:43
euqals方法是我们判断两个对象是否相同的重要依据,
我们在不同的类中,根据具体的不同实现,我们根据需要,来覆写这个equals方法。
==号用于判断两个对象的地址,一般是哈希值。
我们创建了一个类的n多对象,我们需要它具备可比性的时候,当我们要把它存入到哈希结构的集合中,此时还需要覆写一个hashCode(),然后我们再实现比较器接口,让这个类的对象具备实际需要的比较方法。
作者: 崔岩    时间: 2012-3-14 20:21
魏昂 发表于 2012-3-14 17:50
但 ,我 曾记得在哪里看到过 equals 在Object与String中的调用中 传递的是不一样的 ,具体又记不清楚了.. ...

你说的String是包装类,也就是java为我们定义好了的类,里面有一堆对于字符串的操作方法,而且在String中重写了equals方法,你虽然可以直接用,但是不代表人家背后没做工作~嘿嘿。 是sun已经写好的,类似的情况有很多,java有庞大的代码库,否则我们今天要做的工作一定比现在多多了。 其实编程语言实现原理都差不多,没什么神奇的,你觉得好神奇好方便的地方,都是别人事先定义好了封装起来的东西。




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