设为首页 加入收藏

TOP

C#比较两个对象是否为同一个对象。
2019-09-17 18:24:18 】 浏览:23
Tags:比较 两个 对象 是否 同一个

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

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方法,所以应该同上。

所以用第一种。

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C#函数返回值。 下一篇继承中的关键字

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目