欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#比较两个对象是否为同一个对象。

程序员文章站 2022-10-21 08:07:28
两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存。 1、使用object.ReferenceEquals() 2.使用object.equals() 3、使用== 得到同样的结果。 目前来看,这三个方法都能判断两个对象是否为同一个对象。但是: 这两个s1,s2是两个不同的对象,因为ne ......

两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存。

1、使用object.referenceequals()

class program
    {
        static void main(string[] args)
        {
            person p1 = new person();
            p1.name = "mark";
            person p2 = new person();
            p2.name = "marl";
            person p3 = p1;
            console.writeline(object.referenceequals(p1,p2));
            console.writeline(object.referenceequals(p1,p3));

        }
        class person
        {
            public string name { get; set; }
        }
    }
   //结果:false。
        true

2.使用object.equals()

class program
    {
        static void main(string[] args)
        {
            person p1 = new person();
            p1.name = "mark";
            person p2 = new person();
            p2.name = "marl";
            person p3 = p1;
            console.writeline(p1.equals(p2));
            console.writeline(p1.equals(p3));

        }
        class person
        {
            public string name { get; set; }
        }
    }
  //结果同上

3、使用==    得到同样的结果。

目前来看,这三个方法都能判断两个对象是否为同一个对象。但是:

static void main(string[] args)
        {
            string s1 = new string(new char[] { 'a', 'b' });
            string s2 = new string(new char[] { 'a', 'b' });
            console.writeline(s1==s2);//true
            console.writeline(s1.equals(s2));//true
            console.writeline(object.referenceequals(s1,s2));//false
        }

这两个s1,s2是两个不同的对象,因为new了两次,在堆中存在两块不同的内存。

总结:

equals:内部是判断两个对象中的值是否一样。

==:内部还是调用的equals方法,所以应该同上。

所以用第一种。