C# 中 ==和equals的区别

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

下面是测试代码测试

            Console.WriteLine("--equals和==的区别--"); Console.WriteLine("一、对于值类型的数据"); Console.WriteLine(); Console.WriteLine("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.二、对于类型不一样可是数学上值相同的数"); 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("二、对于引用类型的数据"); Console.WriteLine(); Console.WriteLine("2.一、在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.二、在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();

 

打印以下:this

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

1.一、类型和数学上的值都相同的数
(int)1 == (int)1 的结果是:True
(int)1).Equals((int)1) 的结果是:True
1.二、对于类型不一样可是数学上值相同的数
(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 的结果是:Falsecode

二、对于引用类型的数据blog

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

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

 

 

仍是给个说明吧:it

Equals具体的用发应该看类型本身的实现。io

对于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; }
相关文章
相关标签/搜索