首页 > 其他 > 详细

C#中equals和==的区别有哪些

时间:2014-03-16 06:54:30      阅读:516      评论:0      收藏:0      [点我收藏+]
本文导读:C# 中==是用来判断变量的值是否相等,相等返回true,不相等返回false。Equals是用来判断两个对象(除string类型外)是否相等,相等的 条件是:值,地址,引用全相等,因为String类重写了Equals方法,所以当string类型的对象用Equals方法比较时只比较两个对象的值相 等返回true,不相等返回false。

 

C# 中有两种不同的相等:引用相等和值相等。


◎值相等是大家普遍理解的意义上的相等:它意味着两个对象包含相同的值。
◎引用相等意味着要比较的不是两个对象,而是两个对象引用,且两者引用的是同一个对象。

 

Equals:


下面的语句中,x、y 和 z 表示不为 null 的对象引用。

* 除涉及浮点型的情况外,x.Equals(x) 都返回 true。
* x.Equals(y) 返回与 y.Equals(x) 相同的值。
* 如果 x 和 y 都为 NaN,则 x.Equals(y) 返回 true。
* 当且仅当 x.Equals(z) 返回 true 时,(x.Equals(y) && y.Equals(z)) 才返回 true。
* 只要不修改 x 和 y 引用的对象,对 x.Equals(y) 的相继调用将返回相同的值。
* x.Equals(null) 返回 false。
 

==:


对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。

对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。
对于 string 类型,== 比较字符串的值。
 

Equals与==的区别

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

"equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。  
而字符串是一个特殊的引用型类型,在C#语言中,重载了string 对象的很多方法方法(包括equals()方法),使string对象用起来就像是值类型一样。

 
实例
 
C# 代码   复制
bubuko.com,布布扣 using System;
bubuko.com,布布扣 using System.Collections.Generic;
bubuko.com,布布扣 using System.Linq;
bubuko.com,布布扣 using System.Text;
bubuko.com,布布扣 
bubuko.com,布布扣namespace ConsoleApplication1
bubuko.com,布布扣 {
bubuko.com,布布扣     class Person
bubuko.com,布布扣     {
bubuko.com,布布扣         privatestring name;
bubuko.com,布布扣         publicstring Name
bubuko.com,布布扣         {
bubuko.com,布布扣             get{ return name; }
bubuko.com,布布扣             set{ name = value; }
bubuko.com,布布扣         }
bubuko.com,布布扣         public Person(string name)
bubuko.com,布布扣         {
bubuko.com,布布扣             this.name = name;
bubuko.com,布布扣         }
bubuko.com,布布扣     }
bubuko.com,布布扣     class program
bubuko.com,布布扣     {
bubuko.com,布布扣         staticvoid Main(string[] args)
bubuko.com,布布扣         {
bubuko.com,布布扣             string a =newstring(newchar[] ...);
bubuko.com,布布扣             string b =newstring(newchar[] { h, e, l, l, o });
bubuko.com,布布扣             Console.WriteLine(a == b);
bubuko.com,布布扣             Console.WriteLine(a.Equals(b));
bubuko.com,布布扣             object g = a;
bubuko.com,布布扣             object h = b;
bubuko.com,布布扣             Console.WriteLine(g == h);
bubuko.com,布布扣             Console.WriteLine(g.Equals(h));
bubuko.com,布布扣             Person p1 =new Person("jia");
bubuko.com,布布扣             Person p2 =new Person("jia");
bubuko.com,布布扣             Console.WriteLine(p1 == p2);
bubuko.com,布布扣             Console.WriteLine(p1.Equals(p2));
bubuko.com,布布扣             Person p3 =new Person("jia");
bubuko.com,布布扣             Person p4 = p3;
bubuko.com,布布扣             Console.WriteLine(p3 == p4);
bubuko.com,布布扣             Console.WriteLine(p3.Equals(p4));
bubuko.com,布布扣             Console.ReadLine();
bubuko.com,布布扣         }
bubuko.com,布布扣     }
bubuko.com,布布扣 }

C#中equals和==的区别有哪些,布布扣,bubuko.com

C#中equals和==的区别有哪些

原文:http://www.cnblogs.com/hoosway/p/3600709.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!