黑马程序员技术交流社区
标题:
equals和==有什么区别。。。。。
[打印本页]
作者:
党传才
时间:
2012-3-27 11:05
标题:
equals和==有什么区别。。。。。
我怎么感觉差不多啊
作者:
张立江
时间:
2012-3-27 11:10
equlas是比较对象的值,==是判断这两个对象的引用(内存地址)是不是相同,
这个毕老师的视频里面和张孝祥面试宝典都有的,都很详细。
还有 大哥 有什么问题先问下百度吧 自己能解决的问题就不要放在论坛上来了。
作者:
李井山
时间:
2012-3-27 11:21
==比较的是是否是同一个对象,equals是比较对象的内容是否相同
作者:
1002865186
时间:
2012-3-27 11:21
对于基本数据类型,只有==,没有equals()(注意String类型不是基本数据类型),所以很明显值相等就为true。
对于字符串,==指比较两者的内存地址,equals()则重写了Object类的equals(),比较的是内容,你可以查看API看看它怎么重写的。对于字符串是存放在方法区的字符串常量池里的,无论定义多少,只要字符串值相等都指同一块内存地址,所以==和equals()结果没区别。
对于实例对象而言,==比较的依然是内存地址(所以你可以看出无论什么情况,==一直比较的都是内存地址),而equals()默认重写Object类的equals()方法(比较地址)。但是一般我们会自己重写equals(),让它比较值是否相等。
作者:
罗杰
时间:
2012-3-27 11:28
拿String举例,简单来说
== 是判断两个变量是不是指向同一个对象
equals是判断指向的两个对象的内容是不是相同
作者:
李柯
时间:
2012-3-27 12:12
==比较的是两个对象的引用(即内存地址)是否相等,
而equals()比较的是两个对象的值(即内存地址里存放的值)是否相等。
当然equals()在个别类中被重写了那就例外了。
作者:
yangshang1
时间:
2012-3-27 12:13
指示其他某个对象是否与此对象“相等”。
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
作者:
杨华威
时间:
2012-3-27 13:23
equals是比较两个对象的内容是否想同。
==是比较是不是同一个对象,即为指向的地址是否相同。
作者:
罗闯
时间:
2012-3-27 17:00
最近正好也整理了他们的区别:
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就是用==来实现的,你可以看源码。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2