黑马程序员技术交流社区

标题: ==与equals [打印本页]

作者: 高志鹏    时间: 2012-10-25 12:23
标题: ==与equals
本帖最后由 高志鹏 于 2012-10-25 14:14 编辑

今天看到了equals有比较是否相同的功能
那我问下,==与equals有什么相同或者区别么?
作者: 毛标    时间: 2012-10-25 12:28
==比较的是地址值是否一样,equals的话如果不复写object中的equals的话和==是没有区别的
object中的equals底层用的就是==比较的
如果你在其它的类中复写了equals方法那么就与==不一样了,复写了就会按照你复写的要求来进行比较
作者: 翁鹏    时间: 2012-10-25 12:31
如果你不覆写Object类中equals方法的话,那真是一点区别的没有,都是基本数据类型比较字面值,引用数据类型比较是否指向同一个对象。应为Object中的equals方法就是用的 == 比较的。
所以,我们一般要覆写Object中的equals方法,让它比较两个对象的状态是否相同,只要两个对象的状态相同就认为他们是想等的,而不是判断他们是否指向同一个对象。
作者: 王龙    时间: 2012-10-25 12:54
学习了{:soso_e100:}
作者: 给生活加点料    时间: 2012-10-25 12:58
==是比较对象堆内存中对象的地址
equals得分情况:1.当没有重写Object的euqals方法时和==一样比较的都是对象地址
                           2.重写Object的equals方法时equals 比较的是对象的属性值
另外对于字符串的比较一般都用equals

作者: 崔政    时间: 2012-10-25 16:32
本帖最后由 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




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