c#判断两个变量是否为同一个变量
我们有是三个方法去判断两个变量是否为痛一个变量 == Equals object.ReferenceEquals
下面我写一个小程序测试一下
小测试
static void Main(string[] args) { Person p1 = new Person(); p1.Name = "刘欢"; p1.Age = 15; p1.Email = "lh@wahoho"; Person p2 = new Person(); p2.Name = "昆仑决"; p2.Age = 52; p2.Email = "klj@wahoho"; Console.WriteLine(p1==p2); Console.WriteLine(p1.Equals(p2)); Console.WriteLine(object.ReferenceEquals(p1,p2)); Console.ReadKey(); } } public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } }
结果很明显,三个false。因为p1,p2本身就是两个new出来的不同变量。这时我们觉得这三个方法都是可以使用的。下面我们看一个不同的小测试
//我们认为s1与s2是不同的变量 string s1 = new string(new char[] {'a','b','c'}); string s2 = new string(new char[] {'a','b','c'}); Console.WriteLine(s1==s2); Console.WriteLine(s1.Equals(s2)); Console.WriteLine(object.ReferenceEquals(s1,s2)); Console.ReadKey();
这时的结果却是true,true,false。很明显第一个结果和第二个结果错了。
我们通过反编译器看一下第一个和第二个的判断方法


通过这个两个我们看出来,equals在判断是否为空之后,如果不为空返回给一个equalshelper的方法,而这个方法中进行的是对字符串值的判断,这时就会出现这种错诶。而==的判断机制是,首先判断是不是空,不是的话将两个值传给
equals方法。

浙公网安备 33010602011771号