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;
}
C# 中 ==和equals的区别的更多相关文章
- JAVA中“==”与equals()方法区别
equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...
- Java中==与equals()的区别
声明转载来源:http://blog.csdn.net/striverli/article/details/52997927 ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系 ...
- java 中 “==” 和 equals 的区别
转自https://www.cnblogs.com/www123----/p/7857298.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin ...
- Java 中 == 和 equals 的区别
有一段时间,== 和 equals 的区别一直困扰着我.因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解. == 和 equals 最大的区 ...
- Java中“==”与equals的区别以及equals方法的重写
一.“==”与equals的区别: (1)==代表比较双方是否相同: 基本数据类型表示值相等. 引用数据类型表示地址相等,即同一个对象. (2)Object中的equals()方法:是否为同一个对象的 ...
- [No0000B6]C#中 ==与equals的区别
using System; internal class Person { public Person(string name) { Name = name; } public string Name ...
- JAVA中==与equals的区别
equals如果没有被重写的话,和==的作用是一样的,都是判断两个对象引用是否指向同一个地址.一般重写了equals()方法就表示比较它们“实际意义上相等”,比较的是内容,而不是引用地址.Java中S ...
- 【java基础 15】java代码中“==”和equals的区别
导读:昨夜闲来无事,和贾姑娘聊了聊java基础,然后就说到了这个"=="和equals的问题,我俩都是以前了解过,也常用这个,但是,昨天说到的时候,又乱了,什么比较地址值,什么判断 ...
- Java中==和equals()的区别
- java 中 ==和equals 的区别
Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...
随机推荐
- python_机器学习_监督学习模型_决策树
决策树模型练习:https://www.kaggle.com/c/GiveMeSomeCredit/overview 1. 监督学习--分类 机器学习肿分类和预测算法的评估: a. 准确率 b.速度 ...
- springcloud学习之路: (三) springcloud集成Zuul网关
网关就是做一下过滤或拦截操作 让我们的服务更加安全 用户访问我们服务的时候就要先通过网关 然后再由网关转发到我们的微服务 1. 新建一个网关服务Module 2. 依然选择springboot工程 3 ...
- C语言三种参数传递方式
值传递.指针传递.引用传递 只有在函数调用时,才会为形参分配内存空间,调用结束便会释放. 值传递和指针传递,传递的都是实参的一份拷贝. C语言在线编译器:http://www.dooccn.com/c ...
- vue-router路由传参之query和params
首先简单来说明一下$router和$route的区别 //$router : 是路由操作对象,只写对象 //$route : 路由信息对象,只读对象 //操作 路由跳转 this.$router.pu ...
- Google开源PDF软件库
Google开启了一个叫做PDFium的PDF软件库开源项目,开发人员能够将其纳入各种平台应用中. 据Google的Chromium项目的布道师François Beaufort称,PDFium将被包 ...
- 第15节_BLE协议GATT层
学习资料:官方手册 Vol 3: Core System Package [Host volume] Part G: Generic Attribute Profile (GATT) 这篇文章格式比较 ...
- xposed+justtrustme
1.xposed下载: https://repo.xposed.info/module/de.robv.android.xposed.installer https://forum.xda-devel ...
- 子进程回收资源两种方式,僵尸进程与孤儿进程,守护进程,进程间数据隔离,进程互斥锁,队列,IPC机制,线程,守护线程,线程池,回调函数add_done_callback,TCP服务端实现并发
子进程回收资源两种方式 - 1) join让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源. - 2) 主进程 “正常结束” ,子进程与主进程一并被回收资源. from multipr ...
- Netty的常用API(二)
在使用Netty之前先介绍下Netty的常用API,对其有一个大概的了解. 一.EventLoop和EventLoopGroup EventLoop如同它的名字,它是一个无限循环(Loop),在循环中 ...
- 洛谷 P1016 旅行者的预算
传送门 感觉自己连点生活常识都没有,竟然连油用过之后要减去都不知道,这种贪心模拟题都做不出来--思路在代码里,我菜死了 思路&&代码 //看题解过的..一点都没有成就感 #includ ...