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方法。

posted @ 2017-10-20 17:38  你好水  阅读(967)  评论(0)    收藏  举报