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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心是你仰望的城 中级黑马   /  2014-3-3 00:09  /  984 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

“==”和“equals”的具体区别和用法还是有点不懂,求详细解答,谢谢

评分

参与人数 1黑马币 +5 收起 理由
何伟超 + 5

查看全部评分

8 个回复

倒序浏览
1:基本数据类型比较用==也就是用于比较变量所对应的内存中所存储的数值是否相同,
   比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
2:比较两个对象,==表示的两个对象的引用相同,equals比较的是两个对象的内容是否相同。
例如:String a=new String("abcd ");
String b=new String("abcd");
这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,
而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
应该比较详细了吧,希望对你有帮助

评分

参与人数 1黑马币 +5 收起 理由
何伟超 + 5

查看全部评分

回复 使用道具 举报 1 0
1.不管在什么地方,“==”的比较就是比较两个变量引用的地址值,如果“==”比较的结果返回true,则说明这两个变量引用的是同一个对象;
2.你知道Object类是所有类最顶层的父类,如果子类没有覆写equals方法,那它的equals方法就是从Object类继承过来的。一个方法就是去文档中查找某个类的equals方法定义,如果找到了必然有说明它的equals方法是通过什么实现的,如果没有找到说明该类的equals方法是继承自父类(上一级,直接父类)的,那就去父类中找,父类中没有就去父类的父类中找,依次类推,如果最后找到了Object,说明该类的equals方法就是继承自Object的,而Object的equals方法的内部就是比较两个对象的地址值。其实,我看过一些类的源码,包括eclipse自动生成的equals方法,其方法体的第一步就是比较两个对象的地址值,如果两个表示的是同一个对象就返回true,没必要再进行其他比较了。

评分

参与人数 1黑马币 +5 收起 理由
何伟超 + 5

查看全部评分

回复 使用道具 举报
==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。

对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。

基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。

一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。



评分

参与人数 1黑马币 +5 收起 理由
何伟超 + 5

查看全部评分

回复 使用道具 举报
我要的幸福呢 发表于 2014-3-3 00:37
1.不管在什么地方,“==”的比较就是比较两个变量引用的地址值,如果“==”比较的结果返回true,则说明这两 ...

bject的equals方法的内部就是比较两个对象的地址值  好像不是。
回复 使用道具 举报
谭荣强 发表于 2014-3-3 09:31
bject的equals方法的内部就是比较两个对象的地址值  好像不是。


这是Object类源码中的equals方法实现,你可以自己去查下源码看
回复 使用道具 举报
我要的幸福呢 发表于 2014-3-3 09:58
这是Object类源码中的equals方法实现,你可以自己去查下源码看

public boolean equals(Object obj)  指示其他某个对象是否与此对象“相等”。
参数:obj - 要与之比较的引用对象。
返回:如果此对象与 obj 参数相同,则返回 true;否则返回 false。

两个对象的参数相同,应该是你内容吧
回复 使用道具 举报
谭荣强 发表于 2014-3-3 21:44
public boolean equals(Object obj)  指示其他某个对象是否与此对象“相等”。
参数:obj - 要与之比较 ...

我是说源码,不是文档。
不过文档中的一句话也说明了:Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
你再看看。其实我的意思就是说对Object来说,它的equals方法就是通过==来比较的,当然它的子类可以覆写equals方法来通过比较其他内容进行比较,比如说只要某些属性值相同就返回true,而如果没有覆写的话,它的equals方法就是继承自Object类的
回复 使用道具 举报
我要的幸福呢 发表于 2014-3-4 01:27
我是说源码,不是文档。
不过文档中的一句话也说明了:Object 类的 equals 方法实现对象上差别可能性最大 ...

明 白 了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马