ReferenceEquals()方法
string s1 = "hello";
string s2 = "hello";
bool b1=System.Object.ReferenceEquals(s1,s2);
Console.WriteLine(b1);// true s1与s2指向相同的引用
string buffer = ",world";
string s3 = s1 + buffer;
string s4 = s2 + buffer;
bool b2 = Object.ReferenceEquals(s3, s4);//false 字符串改变,各自的引用改变
Console.WriteLine(b2);
Equals()方法
string s1 = "hello";
string s2 = "hello";
bool b1 = s1.Equals(s2); // 实例Equals方法
Console.WriteLine(b1); //true
string s3 = "100";
int i1 = 100;
bool b2 = i1.ToString().Equals(s3); // 实例Equals方法
Console.WriteLine(b2); //true
bool b3 = Object.Equals(s1, s2);// 静态Equals方法
Console.WriteLine(b3); //true
静态Equals | 实例Equals |
---|---|
使用场景:不清楚两个变量运行时的类型 | 使用场景:比较两个变量的内容是否相等 |
ReferenceEquals | Equals |
---|---|
判断引用是否相同 | 判断值是否相同 |
故而,值类型之间使用ReferenceEquals比较,结果必然为false,因为调用这个方法,值类型需要先装箱,引用固然不同
==运算符
引用类型:判断引用是否相同,与ReferenceEquals相似
值类型:判断值是否相同
但是 .NET Framework 中的很多类对其进行了重载,例如String类的==与Equals的行为相同,判断两个字符串的内容是否相等。