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

    所以用第一种。

  • 相关阅读:
    线程池的实现原理
    log4j 具体解说(不能再具体了)
    MyEclipse中背景颜色的设定
    cacheManager载入问题
    SAP 经常使用T-CODE
    Oracle 版本号说明
    用XMPP实现完整Android聊天项目
    选择如何的系统更能适合App软件开发人员?
    爱国者布局智能硬件,空探系列PM2.5检測仪“嗅霾狗”大曝光
    Innodb引擎状态查看
  • 原文地址:https://www.cnblogs.com/zhangyuhao/p/10489461.html
Copyright © 2011-2022 走看看