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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 党传才 中级黑马   /  2012-3-27 11:05  /  2329 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我怎么感觉差不多啊

8 个回复

倒序浏览
equlas是比较对象的值,==是判断这两个对象的引用(内存地址)是不是相同,
这个毕老师的视频里面和张孝祥面试宝典都有的,都很详细。
还有 大哥 有什么问题先问下百度吧 自己能解决的问题就不要放在论坛上来了。
回复 使用道具 举报
==比较的是是否是同一个对象,equals是比较对象的内容是否相同
回复 使用道具 举报
对于基本数据类型,只有==,没有equals()(注意String类型不是基本数据类型),所以很明显值相等就为true。
对于字符串,==指比较两者的内存地址,equals()则重写了Object类的equals(),比较的是内容,你可以查看API看看它怎么重写的。对于字符串是存放在方法区的字符串常量池里的,无论定义多少,只要字符串值相等都指同一块内存地址,所以==和equals()结果没区别。
对于实例对象而言,==比较的依然是内存地址(所以你可以看出无论什么情况,==一直比较的都是内存地址),而equals()默认重写Object类的equals()方法(比较地址)。但是一般我们会自己重写equals(),让它比较值是否相等。
回复 使用道具 举报
拿String举例,简单来说
== 是判断两个变量是不是指向同一个对象
equals是判断指向的两个对象的内容是不是相同
回复 使用道具 举报
==比较的是两个对象的引用(即内存地址)是否相等,
而equals()比较的是两个对象的值(即内存地址里存放的值)是否相等。
当然equals()在个别类中被重写了那就例外了。
回复 使用道具 举报
指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。


参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
另请参见:
hashCode(), Hashtable
回复 使用道具 举报
equals是比较两个对象的内容是否想同。
==是比较是不是同一个对象,即为指向的地址是否相同。
回复 使用道具 举报
罗闯 黑马帝 2012-3-27 17:00:06
9#
最近正好也整理了他们的区别:
1.==有两种用法:第一,用在八种基本类型中时,是判断两个变量的值是否相等,相同时则返回true,不同时则返回false.第二,当用在引用类型中时,它并非是判断两个对象的内容是否相等,而是判断两个对象所指向的内存地址是否相同,相同时则返回true,不同时则返回false.

2.equals只能用在引用类型中,不能用在基本类型中,因为equals是方法,基本类型没有equals方法,equals比较的是对象所指向的内容是否相同,相同,则返回true,不同则返回false

3.equals是方法,而==是运算符,当一个类没有重写equals方法时,默认的是object中的equals方法,而Object中的equals方法其实就是用==来判断的。

关于他们的区别,个人到目前为止遇到的最多的还是String类对象的比较上。(Stirng 重写了 object类的equals方法)API里的类大部分都重写了equals方法,没有重写的一般是自己写的类,如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的,你可以看源码。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马