zoukankan      html  css  js  c++  java
  • 9.了解四个相等判断的用法

    Object.ReferenceEquals(Object left,Object right) :判断两个对象的ID是否相同。

    Object .Equals(Object left,Object right):当不知道两个对象的类型时判断这两个对象是否相同,它是原理是基于“==”和第一个对象的Equals()。

    实例的Equals(Object right)方法:

       原则是不管什么时候,在创建一个值类型时重载Equals()方法,并且你不想让引用类型遵从默认引用类型 的
        语义时也重载Equals(),就像System.Object定义的那样 。当你写你 自己的Equals() 时,遵从要点里实现的内
        容。重载Equals()就意味着你应该重写GetHashCode()

      标准模式:

     public class Foo
        {
         public override bool Equals( object right )
         {
          // check null:
          // the this pointer is never null in C# methods.
          if (right == null)
           return false;

          if (object.ReferenceEquals( this, right ))
           return true;

          // Discussed below.
          if (this.GetType() != right.GetType())
           return false;

         // Compare this type's contents here:
            return CompareFooMembers(
             this, right as Foo );
          }
         }

    另一种方法是派生类的Equals中都调用基类的Equals.

    给了你 4 种方法来检测相等性,但你只须要考虑为其中两个提供你 自己的方法。你决不应该重载静态 的 
       Object.ReferenceEquals()和静态 的Object.Equals(),因为它们提供了正确的检测,忽略运行时类型 。你应该
       为了更好的性能而总是为值类型实例提供重载的Equals()方法和操作符==() 。当你希望引用类型 的相等与对
       象ID 的相等不同时,你应该重载引用类型实例 的Equals()

  • 相关阅读:
    TestMap HashMap的常见操作
    三种方式遍历一颗二叉树
    jmeter 5.1.1版本 进行抓包的时候弹出输入密码
    浅谈Java中的AOP面向切面的变成和控制反转IOC
    rpc测试框架
    SpringBoot下,@WebFilter配置获取日志
    某些测试工具
    Google的三大马车
    关于Mock的一些网站
    用Jmeter做性能测试,之后报表展示
  • 原文地址:https://www.cnblogs.com/movemoon/p/2735643.html
Copyright © 2011-2022 走看看