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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Ezreal 中级黑马   /  2014-8-7 16:54  /  2191 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


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比较的是对象的内容。

13 个回复

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

你自己复写的equals方法当然另当别论啊
回复 使用道具 举报
不错,分析的不错,我现在主要还是在集合那个地方有点迷糊。
回复 使用道具 举报
参考网上的分析,讲得很透彻
http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html
回复 使用道具 举报
左脑想你 来自手机 中级黑马 2014-8-7 18:23:11
地板
这个要是看所属的类有没有重写equals方法~~没有重写就是object里面的,有重写就按照自己的方法比较
回复 使用道具 举报
==和equals比较的内容是不同的
回复 使用道具 举报
==比较的是对象地址值,而equals默认比较的也是对象地址值,但如String类复写equals比较的是字符串内容是否相同
回复 使用道具 举报
这个有可能面试题会问到的  不错
回复 使用道具 举报
总结很好啊 赞
回复 使用道具 举报
wnmmp 发表于 2014-8-7 18:07
参考网上的分析,讲得很透彻
http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html ...

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

总结的很好,谢谢分享!
回复 使用道具 举报
他们说的都好啊,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马