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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王兴 黑马帝   /  2011-12-31 16:18  /  1937 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王兴 于 2011-12-31 21:05 编辑

帖子里说:
==是判断两个变量或实例是不是指向同一个内存空间
equals是判断两个变量或实例所指向的内存空间的值是不是相同
这个可能不好理解 以前看java视频的时候 里面的老师说可以这样简单理解 就是==比较的是类型和值 但equals只比较值 比如说 int a=1 string b=“1”  比较a和b 用==的话不相等 用equals的话就相等了

可是,为什么我对下面的代码测试
        int d = 1;
            int e = 1;
            string c = "1";
            Console.WriteLine(d == e);
            Console.WriteLine(d.Equals(e));
            Console.WriteLine(d.Equals(c));
得到的结果是
True
True
False
呢,这是为什么呢

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

3 个回复

正序浏览
王兴 黑马帝 2011-12-31 21:03:07
板凳
李荣壮 发表于 2011-12-31 18:54
不要把别的语言中的理解带到另外一种语言中来, 因为它们实现过程可能是有差异的....
使用Reflector查看Equa ...

非常感谢,现在明白了
回复 使用道具 举报
本帖最后由 李荣壮 于 2011-12-31 19:08 编辑

不要把别的语言中的理解带到另外一种语言中来, 因为它们实现过程可能是有差异的....
使用Reflector查看Equals()方法的实现过程, 你会发现它也是通过比较"=="来实现的
所以你得到的结果完全没有问题

int.Equals()方法有两个重载, 你仔细看它们的智能提示的信息:
int.Equals(int obj)         返回一个值, 该值指示此实例是否与指定的System.Int32值相等.
                                        你第二个结果为True, 是因为它调用 的是这个方法, 比较的值是否相同
int.Equals(object obj)  返回一个值, 该值指示此实例是否与指定的对象相等.
                                      你第三个结果为False, 是因为它调用 的这个方法, 比较的两者的对象是否相等, int对象当然不会和string对象相同了.
回复 使用道具 举报
int和string分配的不是一个内存空间或者不是同一块区域
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马