zoukankan      html  css  js  c++  java
  • C# 中 ==和equals的区别

    不想说太多,直接上代码,这两个就没什么联系,有自己独立的规则。联系在一起其实不利于记忆。

    下面是测试代码

                Console.WriteLine("--equals和==的区别--");
                Console.WriteLine("1、对于值类型的数据");
                Console.WriteLine();
                Console.WriteLine("1.1、类型和数学上的值都相同的数");
                Console.WriteLine($"(int)1 == (int)1 的结果是:{(int)1 == (int)1}");
                Console.WriteLine($"(int)1).Equals((int)1) 的结果是:{((int)1).Equals((int)1)}");
    
                Console.WriteLine("1.2、对于类型不同但是数学上值相同的数");
                Console.WriteLine($"(int)1 == (long)1 的结果是:{(int)1 == (long)1}");
                Console.WriteLine($"(int)1 == (double)1 的结果是:{(int)1 == (double)1}");
                Console.WriteLine($"(int)1 == (double)1.0 的结果是:{(int)1 == (double)1.0}");
                Console.WriteLine($"(int)1 == (decimal)1 的结果是:{(int)1 == (decimal)1}");
                Console.WriteLine($"(int)1 == (decimal)1.0 的结果是:{(int)1 == (decimal)1.0}");
                Console.WriteLine($"((int)1).Equals((long)1 的结果是:{((int)1).Equals((long)1)}");
                Console.WriteLine();
    
                Console.WriteLine("2、对于引用类型的数据");
                Console.WriteLine();
                Console.WriteLine("2.1、在1.1的基础上转化为object再比较");
                Console.WriteLine($"(object)(int)1 == (object)(int)1 的结果是:{(object)(int)1 == (object)(int)1}");
                Console.WriteLine($"((object)(int)1).Equals((object)(int)1 的结果是:{((object)(int)1).Equals((object)(int)1)}");
                Console.WriteLine();
    
                Console.WriteLine("2.2、在1.2的基础上转化为object再比较");
                Console.WriteLine($"(object)(int)1 == (object)(long)1 的结果是:{(object)(int)1 == (object)(long)1}");
                Console.WriteLine($"((object)(int)1).Equals((object)(long)1 的结果是:{((object)(int)1).Equals((object)(long)1)}");
                Console.WriteLine();
                Console.ReadKey();

     

    打印如下:

    --equals和==的区别--
    1、对于值类型的数据

    1.1、类型和数学上的值都相同的数
    (int)1 == (int)1 的结果是:True
    (int)1).Equals((int)1) 的结果是:True
    1.2、对于类型不同但是数学上值相同的数
    (int)1 == (long)1 的结果是:True
    (int)1 == (double)1 的结果是:True
    (int)1 == (double)1.0 的结果是:True
    (int)1 == (decimal)1 的结果是:True
    (int)1 == (decimal)1.0 的结果是:True
    ((int)1).Equals((long)1 的结果是:False

    2、对于引用类型的数据

    2.1、在1.1的基础上转化为object再比较
    (object)(int)1 == (object)(int)1 的结果是:False
    ((object)(int)1).Equals((object)(int)1 的结果是:True

    2.2、在1.2的基础上转化为object再比较
    (object)(int)1 == (object)(long)1 的结果是:False
    ((object)(int)1).Equals((object)(long)1 的结果是:False

    还是给个说明吧:

    Equals具体的用发应该看类型自己的实现。

    对于int型的比较代码是这样定义的:如果比较的是int型,返回使用==比较的结果;如果不是,先判断是不是int型,不是直接返回false,是再返回使用==比较的结果。

    int 的Equals方法只支持int和object两种,如果传入其他类型,会自动转化为object。如((int)1).Equals((long)1 等价于 ((int)1).Equals((object)(long)1

            [__DynamicallyInvokable]
            public override bool Equals(object obj)
            {
                if (!(obj is int))
                {
                    return false;
                }
                return this == (int)obj;
            }
    
            [NonVersionable]
            [__DynamicallyInvokable]
            public bool Equals(int obj)
            {
                return this == obj;
            }
  • 相关阅读:
    Excel中substitute替换函数的使用方法
    如何在Excel中提取小数点后面的数字?
    提升单元测试体验的利器--Mockito使用总结
    SpringMVC项目读取不到外部CSS文件的解决办法及总结
    java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口
    Spring-data-redis操作redis知识总结
    优雅高效的MyBatis-Plus工具快速入门使用
    Thrift入门初探(2)--thrift基础知识详解
    Thrift入门初探--thrift安装及java入门实例
    spring事件驱动模型--观察者模式在spring中的应用
  • 原文地址:https://www.cnblogs.com/tanl/p/10953670.html
Copyright © 2011-2022 走看看