黑马程序员技术交流社区

标题: 总结equals和"=="的关系 [打印本页]

作者: Ezreal    时间: 2014-8-7 16:54
标题: 总结equals和"=="的关系

1、如果比较基本类型,则用==比较,不能用equals
2、对于基本类型的包装类型,如Boolean,Character,Byte,Short,Integer,Long,Float,Double,用==是比较地址的,用equals是比较类型的。  
     ==在比较引用和基本类型是具有不同的功能。在比较基本类型时,若值相同,则返回true,比较引用时,若引用指向内存中的同一对象,则返回true,即比较引用的地址(地址在栈中)
      Equals比较两个变量是否是对同一个对象的引用,不能比较基本数据类型,比较两个对象的内容(内容在堆中)。
      如:String s1=”abc”;String s2=”abc”,则s1==s2返回true,因为他们地址相同,s1.equals(s2)也返回true,因为他们的内容也相同。  
又如:String s1=”abc”;String s2=new String(“abc”);则s1==s2返回false,s1.equals(s2)返回true,因为他们地址不同但是内容相同,指向的不是同一个对象,虽然对象的内容相同
简单的来讲,==比较的是值,equals比较的是对象的内容。

作者: zz_job    时间: 2014-8-7 17:19
并不一定是这样的吧
因为equals是定义在Object类中的。
在集合框架中如果用HashSet存储自定义对象,通常会复写对象所属类的hashCode和equals方法。
这种时候equals方法比较的内容是由程序员来指定的。所以您的总结仅限定于Object类中的equals方法。
说得不好,请多指教。
作者: Ezreal    时间: 2014-8-7 17:44
zz_job 发表于 2014-8-7 17:19
并不一定是这样的吧
因为equals是定义在Object类中的。
在集合框架中如果用HashSet存储自定义对象,通常会 ...

你自己复写的equals方法当然另当别论啊
作者: 复仇者联盟    时间: 2014-8-7 17:55
不错,分析的不错,我现在主要还是在集合那个地方有点迷糊。
作者: wnmmp    时间: 2014-8-7 18:07
参考网上的分析,讲得很透彻
http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html
作者: 左脑想你    时间: 2014-8-7 18:23
这个要是看所属的类有没有重写equals方法~~没有重写就是object里面的,有重写就按照自己的方法比较
作者: Joemi    时间: 2014-8-7 20:09
==和equals比较的内容是不同的
作者: 南柯一梦    时间: 2014-8-7 21:09
==比较的是对象地址值,而equals默认比较的也是对象地址值,但如String类复写equals比较的是字符串内容是否相同
作者: 我为你着迷    时间: 2014-8-7 21:21
这个有可能面试题会问到的  不错
作者: 付士长    时间: 2014-8-7 22:07
总结很好啊 赞
作者: Ezreal    时间: 2014-8-7 23:50
wnmmp 发表于 2014-8-7 18:07
参考网上的分析,讲得很透彻
http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html ...

谢谢分享
作者: alvinbx    时间: 2014-8-7 23:59
==是值数据类型比较,equals是引用数据类型比较。记住这两点就差不多了,我一直是这么分辨的,不过你举例说明白点可能可以加分。
作者: 我行我SHOW‰    时间: 2014-8-8 00:52
wnmmp 发表于 2014-8-7 18:07
参考网上的分析,讲得很透彻
http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html ...

总结的很好,谢谢分享!
作者: java_668    时间: 2014-8-8 08:51
他们说的都好啊,,




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