黑马程序员技术交流社区

标题: 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