• 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 方法。
    在值类型中实现相等运算符 (==)
    大多数编程语言中都没有用于值类型的默认相等运算符 (==) 实现。因此,只要相等有意义就应该重载相等运算符 (==)。

  • 相关阅读:
    layer open用法
    解决服务器连接错误Host ‘主机号’ is not allowed to connect to this MySQL server
    java数据类型转换
    Java数八大据类型的拓展
    Java八大基本数据类型
    JDK、JRE、JVM的基本介绍
    Java特性和优势
    Dos常用命令
    四种cmd打开方式
    Markdown学习
  • 原文地址:https://www.cnblogs.com/honk/p/13433417.html
Copyright © 2020-2023  润新知