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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高志鹏 中级黑马   /  2012-10-25 12:23  /  1458 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高志鹏 于 2012-10-25 14:14 编辑

今天看到了equals有比较是否相同的功能
那我问下,==与equals有什么相同或者区别么?

评分

参与人数 1黑马币 +12 收起 理由
谭立文 + 12

查看全部评分

5 个回复

倒序浏览
==比较的是地址值是否一样,equals的话如果不复写object中的equals的话和==是没有区别的
object中的equals底层用的就是==比较的
如果你在其它的类中复写了equals方法那么就与==不一样了,复写了就会按照你复写的要求来进行比较
回复 使用道具 举报
如果你不覆写Object类中equals方法的话,那真是一点区别的没有,都是基本数据类型比较字面值,引用数据类型比较是否指向同一个对象。应为Object中的equals方法就是用的 == 比较的。
所以,我们一般要覆写Object中的equals方法,让它比较两个对象的状态是否相同,只要两个对象的状态相同就认为他们是想等的,而不是判断他们是否指向同一个对象。
回复 使用道具 举报
学习了{:soso_e100:}
回复 使用道具 举报
==是比较对象堆内存中对象的地址
equals得分情况:1.当没有重写Object的euqals方法时和==一样比较的都是对象地址
                           2.重写Object的equals方法时equals 比较的是对象的属性值
另外对于字符串的比较一般都用equals
回复 使用道具 举报
本帖最后由 cz2861856 于 2012-10-25 16:37 编辑

如楼上几位所说,==比较的是内存地址值,其实equals也是一样对。给你举个例子
int a=1;
int b=1;
boolean boo=(a==b)  //true
String str1="abc";
String abc2=new String("abc");
boolean boo2=(str1==str2)  //false  比较的是内存地址值
boolean boo3=(str.equals(str2))//true  String复写了Object的equals方法,只比较字符串所以等。

String st1="qwe";
String st2="qwe";
boolean b=(st1==st2); //这时是相等的,为true,因为当创建st1的时候,qwe会进入常量池,在建立时,为了节省空间,会在常量池中查找qwe是否存在
                                  //就将内存的对象赋值给他,也就是st1给了st2所以true
一般在编写时,我觉得如果是基本数据类型就用==,如果是引用数据类型就equals,如果有特殊要求,就复写equals
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马