黑马程序员技术交流社区
标题:
Equals()方法与==有什么区别
[打印本页]
作者:
小人物
时间:
2013-4-27 09:46
标题:
Equals()方法与==有什么区别
本帖最后由 小人物 于 2013-4-27 12:18 编辑
“==”是看两个对象是否是同一个对象,也就是两个对象引用是否指向同一个对象,当然如果用于int,long,double就不是看两个值是否相等了。
equals()是比较两个对象的内容是否相等!像这些说的,那么应该有一种情况用==判断的话,俩者就相等,而用equals判断俩者不相等了!
谁能用代码写一个例子!可以显示出俩者的区别!
作者:
尹丽峰
时间:
2013-4-27 09:54
==是比较引用地址值,equals是比较对象里边的内容的
作者:
殇_心。
时间:
2013-4-27 10:03
本帖最后由 殇_心。 于 2013-4-27 10:05 编辑
测试代码如下:
class Test
{
public static void main(String[] args)
{
Integer x = new Integer("123");
Integer y = 123;
System.out.println(x==y);//false 地址引用值不同
System.out.println(x.equals(y));//true 值相等
}
}
可能出现楼主说的那样情况的。
除非你复写hascode和equals方法。
定义自己比较的方法。
作者:
刘胜寒
时间:
2013-4-27 10:03
本帖最后由 刘胜寒 于 2013-4-27 10:05 编辑
尹丽峰 发表于 2013-4-27 09:54
==是比较引用地址值,equals是比较对象里边的内容的
嗯....
是比较引用地址值
不是hashCode
值...
有些时候hashCode被复写了得出的值不是内存地址
有个东西是System.identityHashCode这个是返回唯一内存地址无论HashCode是否重写
我以前用发帖问为什么HashCode一样为什么用==返回的是false...
发现当时好菜
系统建议如果HashCode相同那么equals也相同,反之依然
作者:
张洪慊
时间:
2013-4-27 10:36
注意楼上刘同学那句话.
个人理解:
哈希地址和内存地址是两个不同概念,你不要混搅到一起
如果你学过数据结构,在学哈希表时,首先构造哈希表,然后会利用哈希函数算出每个值对应的哈希地址.
对于"==".一定比较的是引用地址(为true,说明引用同一个对象,例如:常量池中的同一个字符串对象)
对于equals,你只需要看所使用的对象所属的类是否复写该方法,没有复写依然使用的是Object中的equals,
否则根据复写的算法进行比较.
作者:
闫常国
时间:
2013-4-27 10:56
equals()方法只是匹配两个字符串是否是一样的,而“==”比较的是==两边的对象的内存地址是否相同
作者:
小人物
时间:
2013-4-27 12:15
尹丽峰 发表于 2013-4-27 09:54
==是比较引用地址值,equals是比较对象里边的内容的
谢谢你的回答
作者:
小人物
时间:
2013-4-27 12:17
非常感谢各位的回答,我已经对他们的区别理解了,虽然不是多透彻!但是大体的意思明白了,我想随着以后代码量的增加,应该会明白的越来越透彻的!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2