C#中Equals和==的区别 (面试官经常会问到)
首先对于值类型来说,并没有什么区别。区别只针对于引用类型。
一、值类型
1.对于值类型来说,两者比较的都是“内容”是否相同,也就是值是否相同(值类型只有存在栈上)。
二、引用类型
1.对于引用类型来说,本身的值存在堆中,在栈中存入本身值的引用,可以根据引用找到自己。
所以:
对于引用类型来说,==比较的两个变量的”引用“是否一样,也就是“地址”是否一样。而equals比较的是”内容“是否一样。
1. 比较引用类型:
Person p1 = new Person("aa", 12);Person p2 = new Person("aa", 12);Console.WriteLine("Equals和= =(等于号)的比较");Console.WriteLine("p1==p2 " + (p1 == p2));//结果:false Console.WriteLine("p1.Equals(p2) " + p1.Equals(p2));//结果:false
p1==p2 的结果是false,很简单,因为他们本身是两个不同的变量,引用地址是不同的。
那么p1.Equals(p2) 为什么是false 呢?
因为Equlas是object的一个虚方法,而person并没有对其进行重写,此时调用的是父类的Equlas方法,但是父类是不知道p1和p2中有哪些成员的,
所以返回false。
如果想让其相等,就要重写父类的Equlas方法,比如:
public override bool Equals(object obj){Person p = obj as Person;//对变量的所有的属性都要进行比较 只有都相同才返回trueif (this.Age == p.Age && this.Name == p.Name){return true;}else{return false;}}
在开发过程中,会经常用到string类型的字段进行Equlas比较,但是比较的结果和==一模一样。比如:
string s1 = "abc";string s2 = "abc";Console.WriteLine("s1==s2 " + (s1 == s2));//true Console.WriteLine("s1.Equals(s2) " + s1.Equals(s2));//true
为什么s1和s2两个不同的变量Euulas比较的结果会相同呢?
因为string是微软封装的一个字符串类,在内部已经对==操作符进行了重写。重写后比较的是两个变量的值是否相同。
内部封装如下:
public static bool operator == (string a,string b) {return Equals(a,b); }
因此,对于string类型来说,比较的都是值是否相等。(可以把string当成一个特殊的引用类型)。
总结:对于值类型来说,Equlas和==并没有什么区别,比较的都是值是否相等。
对于引用类型来说,Equlas比较的是值是否相等,==比较的是引用是否相等。string是个特殊的引用类型,内部进行了重写,==比较的是值是否相等。
转载于:https://www.cnblogs.com/BounceGuo/p/10320873.html
C#中Equals和==的区别 (面试官经常会问到)相关推荐
- JAVA 中equals()与==的区别
原文地址:http://www.chineselinuxuniversity.net/articles/29594.shtml 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存 ...
- 今天来谈谈面试官最喜欢问JS中的闭包问题吧
今天来谈谈面试官最喜欢问JS中的闭包问题吧 1.什么是闭包? 闭包是指有权访问另外一个函数作用域中的变量的函数,闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在.闭包就是函数的&qu ...
- Java 基本数据类型的强制转换和自动转换,基本数据类型包装类,Integer常用方法,Integer中equals和==的区别
文章目录 基本数据类型的自动转换 基本数据类型的强制转换 包装类(封装类) Integer类中的方法 一:Number中的xxxValue()方法 二:Integer.parseInt("S ...
- c语言equals用法,C# 中 equals( ) 和 == 的区别和用法
Equals: 下面的语句中,x.y 和 z 表示不为 null 的对象引用. * 除涉及浮点型的情况外,x.Equals(x) 都返回 true. * x.Equals(y) 返回与 y.Equal ...
- 面试java你最擅长什么_面试官最喜欢问的10道Java面试题
1.Java的HashMap是如何工作的? HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值. HashMap 基于 hashing 原理,我们通过 put ()和 g ...
- 为什么面试官总喜欢问String?
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者:tan日拱一兵 来源:公众号「日拱一兵」 关于 Java String,这是面试的基础 ...
- 阿里的面试官都喜欢问哪些问题?
作者:徐刘根 | 公众号:Java之间 金九银十是招聘的旺季,小编在这里也给大家整理了一套阿里面试官最喜欢问的问题或者出场率较高的面试题,助校招或者社招路上的你一臂之力! 首先我们需要明白一个事实,招 ...
- 技术面试官应该怎么问?面试者应该怎么答?
每年年初都是招聘.求职的旺季,不管你是企业面试官,还是职场小鸟,都应该要清楚对方问的是什么,意图在哪里,不要答非所问,一脸迟疑. 年初以来,面试过很多人,面试的内容无非就那么几类,反反复复 ...
- 面试官95%会问的接口测试知识
接口测试最近几年被炒的火热了,越来越多的测试同行意识到接口测试的重要性.接口测试为什么会如此重要呢? 主要是平常的功能点点点,大家水平都一样,是个人都能点,面试时候如果问你平常在公司怎么测试的,你除了 ...
- 【面试经】数据分析 or 数据开发面试必备思路,面试官都会这样问。
欢迎来到" 久也 "的空间 希望能让 数据 相关工作的同学遇到困难找到答案 没有请找我!!! 目录 前言: 什么是链路"链路"? 首先以项目为维度的话,链路如下 ...
最新文章
- Objective-C:GCC+GNUstep配置
- 初识mysql学习笔记
- Vue-使用webpack+vue-cli搭建项目
- Embeded linux之移植iptables
- xp变量 java_winxp系统设置java环境变量的详细教程
- vSphere共享存储全配置流程
- multipart/form-data;boundary=----WebKitFormBoundaryRAYPKeHKTYSNdzc1;charset=UTF-8‘ not supporte
- python flask api部署_使用flask开发api——部署flask,使用gunicorn+gevent模式的http server...
- Lagrangian乘子法 对偶问题 KKT条件 Slater条件 与凸优化
- 网络电视机顶盒测试软件,调试接口查找方法,机顶盒刷成全网通盒子,实现免费看电视...
- 气象数据下载网站整理
- 个性化不和谐帐户的8种方法
- 解决chm文件打开后跳到某一主页方法
- 关于账本数据库:你想知道的这里都有
- 移动修改服务器密码是什么,移动服务器密码
- java ee7教程_JavaEE 7.0 Web技术教程 -解道Jdon
- matlab 冲激响应不变法,matlab实验七 冲激响应不变法IIR数字滤波器设计
- 计算机软件添加信任,瑞星杀毒怎么添加信任软件 添加方法介绍
- 从业务架构师角度看区块链为什么以及如何改变世界
- axure键盘弹出_AxureRP实现键盘交互效果