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,因为字符串daShuai及baWang均为"DaShuai"。
对于整型数据:
Int32.Equals 方法 (Int32)
返回一个值,该值指示此实例是否与指定的 Int32值相等。
很显然,按值比较,daShuaiAge.Equals(baWangAge)为true,因为字符串daShuaiAge及baWangAge均为25。
对于Object:
Object.Equals 方法 (Object)
确定指定的对象是否等于当前对象。
很显然,按引用比较,DaShuai.Equals(BaWang)为false,因为DaShuai及BaWang引用不可能相同。
这里,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,因为daShuaiAge,baWangAge在转换成Object时。会进行装箱操作,那么两者会得到不同的引用。
ReferenceEquals(DaShuai, BaWang)很显然为false。
4.静态的Equals()方法
Object.Equals 方法 (Object, Object)
确定指定的对象实例是否被视为相等。
作用与“= =”相同,所以比较结果与“= =”一致。
总结至此,88.