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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 狄琛林 中级黑马   /  2012-9-17 10:49  /  1968 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 狄琛林 于 2012-9-18 10:47 编辑

C#中equals和 ==的区别是什么?最好详细点啊.

评分

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

查看全部评分

7 个回复

倒序浏览
使用场景:
1.若比较两个基本类型的数值是否相等,用“==”来比较;
2.若比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较;
回复 使用道具 举报
Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则Equals返回true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。可以根据需要对Equals进行重载,例如String类的Equals用于判断两个字符串的内容是否相等。
   StringBuilder a = new StringBuilder();
   a.Append("the test a");
   String s1 = a.ToString();
   String s2 = "the test a";
   if (s2 == s1) //为真,因为S2,S1内容相等。String类的==与Equals的行为相同,判断两个字符串的内容是否相等
   Console.WriteLine("== returns true");
   if (Object.Equals(s2, s1)) //为真,String类重载了Equals,用于判断两个字符串的内容是否相等
   {
   Console.WriteLine("equals returns true");
   }
   if (Object.ReferenceEquals(s2, s1)) //为假,因为s2,s1并不是指向同一个对象
   {
   Console.WriteLine("ReferenceEquals returns true");
   }
   这个实例将输出:
   == returns true
   equals returns true


==是一个可以重载的二元操作符,可以用于比较两个对象是否相等。
   对于内置值类型,==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。例如:
   Int a = 100;
   Double b =100;
   If(a == b)
   Console.WriteLine(“equal supports compare between different types!”);
   上面这段程序将会输出:
   equal supports compare between different types!
   而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。例如:
   Struct Userstruct1;
   Userstruct1 a;
   Userstruct1 b;
   If(a == b)
   Console.WriteLine(“can == reach this far?”)
   上面的这段代码是不能够通过编译的。可以通过重载使==作用于用户定义的值类型。

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
==是判断引用是否相同,即是否指向同一个对象
Equals默认也是判断引用,但是有的类会重写(overrid)这个方法(Object.Equals)实现特殊的比较相等

评分

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

查看全部评分

回复 使用道具 举报
==
对于预定义的值类型,如果操作数的值相等,则相等运算符   (==)   返回真,否则,返回假。对于除   string   类型以外的引用类型,如果两个操作数引用相同的对象,则   ==   返回真。对于   string   类型,==   将比较字符串的值。
确定两个   Object   实例是否相等。

Equals
确定两个   Object   实例是否相等。

另外,主要看类如何override   这个函数和如何重载运算符

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
  1、对于值类型,==和equals等价,都是比较存储信息的内容。
2、对于引用类型,==比较的是引用类型在栈中的地址,equals方法则比较的是引用类型在托管堆中的存储信息的内容。   
  3、对于string类要特殊处理,它是一个内部已经处理好了equals方法和==的类,故==和equals等价,都是比较存储信息的内容。
4、对于一些自定义的类,我们有必要重载equals方法,否则它默认为基类的equals方法(基类没有重载Equals方法则为Object类中的Equals方法),他们的比较也为地址,而不是引用类型在托管堆中的存储信息的内容。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
Eg:s1 = new String("sony"); //创建的是字符串对象
s1.equals("sony"); //返回
trues1 == "sony" //返回false
//如果
s1 = "sony";
s1 == "sony" //返回true

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
equals相当于 ==  经常用作对象和对象之间的比较
name.equals("admin")和  name=="admin"  一样

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马