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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏昂 黑马帝   /  2012-3-14 16:21  /  2211 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

equals方法是定义在Object中的方法,因此是不是每个类都具有equals方法?、如果是,那么equals方法在不同的类中是不是拥有同样的功能和含义呢?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

9 个回复

正序浏览
魏昂 发表于 2012-3-14 17:50
但 ,我 曾记得在哪里看到过 equals 在Object与String中的调用中 传递的是不一样的 ,具体又记不清楚了.. ...

你说的String是包装类,也就是java为我们定义好了的类,里面有一堆对于字符串的操作方法,而且在String中重写了equals方法,你虽然可以直接用,但是不代表人家背后没做工作~嘿嘿。 是sun已经写好的,类似的情况有很多,java有庞大的代码库,否则我们今天要做的工作一定比现在多多了。 其实编程语言实现原理都差不多,没什么神奇的,你觉得好神奇好方便的地方,都是别人事先定义好了封装起来的东西。
回复 使用道具 举报
张润政 黑马帝 2012-3-14 19:43:14
9#
euqals方法是我们判断两个对象是否相同的重要依据,
我们在不同的类中,根据具体的不同实现,我们根据需要,来覆写这个equals方法。
==号用于判断两个对象的地址,一般是哈希值。
我们创建了一个类的n多对象,我们需要它具备可比性的时候,当我们要把它存入到哈希结构的集合中,此时还需要覆写一个hashCode(),然后我们再实现比较器接口,让这个类的对象具备实际需要的比较方法。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
魏昂 发表于 2012-3-14 17:50
但 ,我 曾记得在哪里看到过 equals 在Object与String中的调用中 传递的是不一样的 ,具体又记不清楚了.. ...

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

是这样描述的:

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

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
回复 使用道具 举报
Object类是所有类的父类,别的类都从Object类中继承equals方法,然后一部分类对equals进行了覆写,用到记不清楚的就看API呗
回复 使用道具 举报
赵英坤 发表于 2012-3-14 16:28
对呀,不同的类有不同的equals方法,但是objects中的方法不是都适合于这每个类,所以你要使用equals方法的 ...

但 ,我 曾记得在哪里看到过 equals 在Object与String中的调用中 传递的是不一样的 ,具体又记不清楚了...
回复 使用道具 举报
默认情况下,使用object类的equals用于比较两个引用是否是指向同一个对象,当引用表示的类中有覆写的equals方法,则调用最新的equals方法,类似于英语中的就近原则。
其他的变量声明也是类似,当有重复的变量或方法名称时,使用在相同定义范围内,距离最近的那个。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
一般都要求复写的 如果是完整设计的类的话
回复 使用道具 举报
如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果
回复 使用道具 举报
对呀,不同的类有不同的equals方法,但是objects中的方法不是都适合于这每个类,所以你要使用equals方法的话,要按照类的不同以及你自己的需要重写equals方法就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马