zoukankan      html  css  js  c++  java
  • C#比较两个对象是否为同一个对象。

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

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

    所以用第一种。

  • 相关阅读:
    NoInstall_Mysql
    说话
    我是一名博客新人
    pom.xml报错
    模板——链表模板、有序链表模板及测试
    模板——函数模板
    模板——类模板
    MDI程序演示
    容器和算法2 C++快速入门48(完)
    MDI程序演示
  • 原文地址:https://www.cnblogs.com/zhangyuhao/p/10489461.html
Copyright © 2011-2022 走看看