C#相等比较用法总结

来源:互联网 发布:有20个usb端口的电脑 编辑:程序博客网 时间:2024/06/04 00:36

C#中提供了4种相等比较的方法,现将这4种相等比较的用法总结如下。

public class Student{     private string name;     public Student(string name)     {          this.name = name;     }     public void ShowName()     {         Console.WriteLine(this.name );     }}static void Main(string[] args){      string daShuai="DaShuai";      string baWang="DaShuai";      int daShuaiAge = 25;              int baWangAge = 25;      Student DaShuai, BaWang;      DaShuai = new Student(daShuai);      BaWang = new Student(baWang);      //1.实例Equals()方法      bool b1 = daShuai.Equals(baWang);      bool b2 = daShuaiAge.Equals(baWangAge);      bool b3 = DaShuai.Equals(BaWang);      Console.WriteLine("1.Equals");      Console.WriteLine("daShuai.Equals(baWang):{0}",b1);      Console.WriteLine("daShuaiAge.Equals(baWangAge):{0}", b2);      Console.WriteLine("DaShuai.Equals(BaWang):{0}", b3);      Console.WriteLine("~~~~~~~~~~>_<~~~~~~~~~~");      //2.= =      bool b4 = daShuai == baWang;      bool b5 = daShuaiAge == baWangAge;      bool b6 = DaShuai == BaWang;      Console.WriteLine("2.==");      Console.WriteLine("daShuai == baWang:{0}", b4);      Console.WriteLine("daShuaiAge == baWangAge:{0}", b5);      Console.WriteLine("DaShuai == BaWang:{0}", b6);      Console.WriteLine("~~~~~~~~~~>_<~~~~~~~~~~");      //3.ReferenceEquals()方法      bool b7 = ReferenceEquals(daShuai, baWang);      bool b8 = ReferenceEquals(daShuaiAge, baWangAge);      bool b9 = ReferenceEquals(DaShuai, BaWang);      Console.WriteLine("3.ReferenceEquals");      Console.WriteLine("ReferenceEquals(daShuai, baWang):{0}", b7);      Console.WriteLine("ReferenceEquals(daShuaiAge, baWangAge):{0}", b8);      Console.WriteLine("ReferenceEquals(DaShuai, BaWang):{0}", b9);      Console.WriteLine("~~~~~~~~~~>_<~~~~~~~~~~");      //4.静态的Equals()方法      bool b10 = Equals(daShuai, baWang);      bool b11 = Equals(daShuaiAge, baWangAge);      bool b12 = Equals(DaShuai, BaWang);      Console.WriteLine("4.静态的Equals");      Console.WriteLine("Equals(daShuai, baWang):{0}", b10);      Console.WriteLine("Equals(daShuaiAge, baWangAge):{0}", b11);      Console.WriteLine("Equals(DaShuai, BaWang):{0}", b12);}

运行程序,结果如下:

结果分析:

实例中分别使用Equals()方法, = =运算符,ReferenceEquals()方法,静态的Equals()方法对字符串,整型数据,引用类型数据进行相等比较操作。

1.实例Equals()方法

对于字符串:

String.Equals 方法 (String),确定此实例是否与另一个指定的 String 对象具有相同的值。

很显然,按值比较,daShuai.Equals(baWang)为true,因为字符串daShuaibaWang均为"DaShuai"

对于整型数据:

Int32.Equals 方法 (Int32)

返回一个值,该值指示此实例是否与指定的 Int32值相等。 

很显然,按值比较,daShuaiAge.Equals(baWangAge)为true,因为字符串daShuaiAgebaWangAge均为25

对于Object:

Object.Equals 方法 (Object)

确定指定的对象是否等于当前对象。 

很显然,按引用比较,DaShuai.Equals(BaWang)为false,因为DaShuaiBaWang引用不可能相同。

这里,String.Equals 方法 (String),Int32.Equals 方法 (Int32)重写 Object.Equals(Object) 方法实现值相等性。Object.Equals 方法 (Object)对引用进行对比。

 

2.= =

对于字符串:

比较字符串内容,所以daShuai == baWang为true。

对于整型数据:

比较值,所以daShuaiAge == baWangAge为true。

对于Object:

引用比较,很可能不相等,所DaShuai == BaWang为false。

 

3.ReferenceEquals()方法

Object.ReferenceEquals 方法 

确定指定的 Object实例是否是相同的实例。 

ReferenceEquals(daShuai, baWang)值为true,因为两者指向同一块内存地址空间。

ReferenceEquals(daShuaiAge, baWangAge)值为false,因为daShuaiAgebaWangAge在转换成Object时。会进行装箱操作,那么两者会得到不同的引用。

ReferenceEquals(DaShuai, BaWang)很显然为false。

 

4.静态的Equals()方法

Object.Equals 方法 (Object, Object)

确定指定的对象实例是否被视为相等。 

作用与“= =”相同,所以比较结果与“= =”一致。

 

总结至此,88.