zoukankan      html  css  js  c++  java
  • Object.Equals 与 == 的区别

    MSDN参考地址:

    https://docs.microsoft.com/zh-cn/dotnet/api/system.object.equals

            private void Test()
            {
                int i = 10;
                int j = 100;
                Equal(i,j);
                i = 100;
                Equal(i, j);
                i = j;
                Equal(i, j);
                System.Diagnostics.Debug.Print($"==============================");
                StringBuilder c = new StringBuilder("AAA");
                StringBuilder d = new StringBuilder("BBB");
                Equal(c, d);
                d = new StringBuilder("AAA");
                Equal(c, d);
                c = d;
                d.Append("CCC");
                Equal(c, d);
            }
    
    
            private void Equal(dynamic a, dynamic b)
            {
                System.Diagnostics.Debug.Print($"{nameof(a)}={a};{nameof(b)}={b};==:{a==b}");
                System.Diagnostics.Debug.Print($"{nameof(a)}={a};{nameof(b)}={b};Equals:{a.Equals(b)}");
            }
    a=10;b=100;==:False
    a=10;b=100;Equals:False
    a
    =100;b=100;==:True a=100;b=100;Equals:True
    a
    =100;b=100;==:True a=100;b=100;Equals:True ============================== a=AAA;b=BBB;==:False a=AAA;b=BBB;Equals:False
    a
    =AAA;b=AAA;==:False a=AAA;b=AAA;Equals:True
    a
    =AAACCC;b=AAACCC;==:True a=AAACCC;b=AAACCC;Equals:True

    结论:

    ==

    值类型和string类型比较的是对象的值是否相等。

    除string类型以外的引用类型比较的是在栈中存储的地址是否相等

    操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

    Equals

    值类型和string类型比较的是对象的值是否相等。

    除string类型以外的引用类型比较的为是否同一引用对象。

    操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同

    每次实现 Equals 方法时都实现 GetHashCode 方法。这可以使 Equals 和 GetHashCode 保持同步。
    每次实现相等运算符 (==) 时,都重写 Equals 方法,使它们执行同样的操作。这样,使用 Equals 方法的基础结构代码(如 Hashtable 和 ArrayList)的行为就与用相等运算符编写的用户代码相同。
    每次实现 IComparable 时都要重写 Equals 方法。
    实现 IComparable 时,应考虑实现相等 (==)、不相等 (!=)、小于 ( <) 和大于 (>) 运算符的运算符重载。
    不要在 Equals、GetHashCode 方法或相等运算符 (==) 中引发异常。
    有关 Equals 方法的相关信息,请参见实现 Equals 方法。
    在值类型中实现相等运算符 (==)
    大多数编程语言中都没有用于值类型的默认相等运算符 (==) 实现。因此,只要相等有意义就应该重载相等运算符 (==)。

  • 相关阅读:
    kudu 存储引擎简析
    Kudu vs HBase
    HBase原理–所有Region切分的细节都在这里了
    4月第3周业务风控关注 | 文化部再次审查直播和游戏产品,已下架4939款直播应用
    知物由学 | 如何应对日益强大的零日攻击
    Apache 流框架 Flink,Spark Streaming,Storm对比分析(二)
    Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)
    poj1637Sightseeing tour(混合图欧拉回路)
    计算机网络_学习笔记 第一章 概述
    [Codecademy] HTML&CSS 第三课:HTML Basic II
  • 原文地址:https://www.cnblogs.com/honk/p/13433417.html
Copyright © 2011-2022 走看看