黑马程序员技术交流社区

标题: ==和equals方法疑问 [打印本页]

作者: 荣右铭    时间: 2013-10-11 08:57
标题: ==和equals方法疑问
本帖最后由 荣右铭 于 2013-10-11 11:48 编辑

在比较字符串时,==运算符和string.equals方法有什么区别?
在比较时==是不是重载了equals方法?
似乎在java中这两者是不同的,但C#中呢?
作者: Liu阳    时间: 2013-10-11 09:26
== 比较基本数据类型是否相同,比较对象的时候看引用指向内存中的同一对象,内存地址。equals监测是两个对象是否相等,即值相等
作者: 面朝大海,春暖    时间: 2013-10-11 09:32
本帖最后由 面朝大海,春暖 于 2013-10-11 09:33 编辑

因为string.equals是从object类继承来的,比较的是两个对象,即比较引用对象,而==一般比较基本数据类型。。值类型。。
作者: 荣右铭    时间: 2013-10-11 10:03
Liu阳 发表于 2013-10-11 09:26
== 比较基本数据类型是否相同,比较对象的时候看引用指向内存中的同一对象,内存地址。equals监测是两个对 ...

百度里这样说
  "==" : 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
  "equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

“同一个对象的引用“是啥意思,后面又说是内容相同,这不就矛盾了?

作者: Liu阳    时间: 2013-10-11 10:14
荣右铭 发表于 2013-10-11 10:03
百度里这样说
  "==" : 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的 ...

string a="s";
string b =a;
引用一样 内容一样
作者: 荣右铭    时间: 2013-10-11 10:19
Liu阳 发表于 2013-10-11 10:14
string a="s";
string b =a;
引用一样 内容一样

可不可能引用不同,而内容相同?
作者: 幸运儿见龙    时间: 2013-10-11 11:31
本帖最后由 幸运儿见龙 于 2013-10-11 12:15 编辑

             int c = 1;
            float d = 1.0f;
            Console.WriteLine(c == d);
            Console.WriteLine(c.Equals(d));
  true    false    这样明显不  一个是int 类型 一个是float类型    值一样

作者: 荣右铭    时间: 2013-10-11 11:47
问题解决,结论:引用类型无论哪个都比较引用,值类型无论哪个都比较值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2