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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小人物 中级黑马   /  2013-4-27 09:46  /  1499 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小人物 于 2013-4-27 12:18 编辑

“==”是看两个对象是否是同一个对象,也就是两个对象引用是否指向同一个对象,当然如果用于int,long,double就不是看两个值是否相等了。
equals()是比较两个对象的内容是否相等!像这些说的,那么应该有一种情况用==判断的话,俩者就相等,而用equals判断俩者不相等了!
谁能用代码写一个例子!可以显示出俩者的区别!

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

7 个回复

倒序浏览
==是比较引用地址值,equals是比较对象里边的内容的
回复 使用道具 举报
本帖最后由 殇_心。 于 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:05 编辑
尹丽峰 发表于 2013-4-27 09:54
==是比较引用地址值,equals是比较对象里边的内容的

嗯....
是比较引用地址值不是hashCode值...
有些时候hashCode被复写了得出的值不是内存地址
有个东西是System.identityHashCode这个是返回唯一内存地址无论HashCode是否重写
我以前用发帖问为什么HashCode一样为什么用==返回的是false...
发现当时好菜

系统建议如果HashCode相同那么equals也相同,反之依然
回复 使用道具 举报
注意楼上刘同学那句话.
个人理解:
哈希地址和内存地址是两个不同概念,你不要混搅到一起
如果你学过数据结构,在学哈希表时,首先构造哈希表,然后会利用哈希函数算出每个值对应的哈希地址.
对于"==".一定比较的是引用地址(为true,说明引用同一个对象,例如:常量池中的同一个字符串对象)
对于equals,你只需要看所使用的对象所属的类是否复写该方法,没有复写依然使用的是Object中的equals,
否则根据复写的算法进行比较.
回复 使用道具 举报
equals()方法只是匹配两个字符串是否是一样的,而“==”比较的是==两边的对象的内存地址是否相同
回复 使用道具 举报
尹丽峰 发表于 2013-4-27 09:54
==是比较引用地址值,equals是比较对象里边的内容的

谢谢你的回答
回复 使用道具 举报
非常感谢各位的回答,我已经对他们的区别理解了,虽然不是多透彻!但是大体的意思明白了,我想随着以后代码量的增加,应该会明白的越来越透彻的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马