C# Equals方法和==有什么区别
开发工具:VS2019
一、关于这两个比较,需要从值类型和引用类型两方面来说
(A)先说值类型
上图:
因为在对值类型进行比较时候,不管 .Equals() 方法还是 == 方法,都是对值类型变量(图中的A,B,C)里的值,也就是栈上面的实际存放的东西进行比较,A的10和B的11,B的11和C的11
下图是值类型在栈中的分配情况
(此图片复制其他网页:https://www.cnblogs.com/dotnet261010/p/12324317.html)
(B)引用类型
上图:
对于引用类型来说,等号 == 比较的是两个变量的引用地址是否一样。
可以发现 an01和an02都是 new 出来的,所以这两个用==判断时候,肯定不相等。
而对于equals来说仍然比较的是变量引用地址在堆上的值,也就是真实内容是否一样。
但 an01 和 an02 的内容是相同的啊,为什么结果还是false?原因引用类型从Object继承,Equals()是Object中的一个虚方法,
Animal类中没有进行重写,没有自己的判断,因此此时调用的仍是父类中的Equals方法,父类是不知道子类都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals() 方法
重写如下图:
修改过后,此时再运行程序得出:
下图是引用类型在内存中分配情况
(此图片复制其他网页:https://www.cnblogs.com/dotnet261010/p/12324317.html)
C# Equals方法和==有什么区别的更多相关文章
- "=="和 equals 方法究竟有什么区别?
"=="和 equals 方法究竟有什么区别? ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, 要比较两个基本类型的数据或两个引 ...
- 【转】彻底弄懂Java中的equals()方法以及与"=="的区别
彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...
- "=="和equals方法究竟有什么区别
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, ...
- "=="和equals方法究竟有什么区别?
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, ...
- java中"=="和equals方法究竟有什么区别?
为什么会说到这个问题呢,是因为在java中遇到这个问题太常见了,无论是在写代码时还是在面试时.下面就一起探讨一下它们之间的联系与区别吧. 首先对于这样的问题,一般是先单独把一个东西说清楚,然后再说另一 ...
- “==”和equals方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的 ...
- 【Java面试题】3 Java的"=="和equals方法究竟有什么区别?简单解释,很清楚
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的 ...
- Java中的“==操作符”和equals方法有什么区别
Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的 ...
- Java - equals方法
java提高篇(十三)-----equals()方法总结 equal和==区别 ==比较对象基于内存引用,两个引用完全相同返回true Java 语言里的 equals方法其实是交给开发者去覆写的,让 ...
随机推荐
- 论文笔记:(ICML2020)On Learning Sets of Symmetric Elements
目录 摘要 一.引言 二.先前的工作 三.基础 3.1 符号和基本定义 3.2 G-不变网络 3.3 描述等变层 3.4 Deep sets 四.DSS层 4.1 对称元素集合 4.2 等变层的表征 ...
- 01_安装电脑软件的步骤批处理脚本.bat
REM 01_安装电脑软件的步骤批处理脚本.bat MD 01_安装电脑软件的步骤 REM ZIP解压密码空格MD 02_制作杏雨梨云USB维护系统2019中秋版之国庆更新固态U盘MD 03_复制安装 ...
- Java面向对象14——接口
接口 package oop.demon01.demon09; //抽象思维~Java //interface 定义的关键字 , 接口都需要有实现类 public interface Use ...
- 一专属SRC - XSS - Bypass长亭Waf
bypass是预言表哥绕的,擦,我这篮子玩xss什么都绕不过 https://www.cnblogs.com/yuyan-sec 这博客我直接倒背如流 主要记录下这次挖掘的过程 先说下 bypass姿 ...
- 文件上传之WAF绕过及相安全防护
文件上传在数据包中可修改的地方 Content-Disposition:一般可更改 name:表单参数值,不能更改 filename:文件名,可以更改 Content-Type:文件 MIME,视情况 ...
- Markdown 学习(语法)
标题 井号加空格(# ) 几个#就是几级标题 字体 粗体 (两边两个*) 斜体 (两边一个*) 斜体加粗 (两边三个*) 中间斜线 (两个波浪号~) 引用 选择引用,一个箭头 > 加空格 分割线 ...
- 记面试的一道JS题
给一个数组arr=[1,2,3,4,5],索引第二位插入'z',设计一个函数change,调用change(arr, 2, 'z')返回一个新数组[1,2,'z',3,4,5] 我想了两种办法: 第一 ...
- 题解 P3941 入阵曲
题解 观察数据范围,可以 \(\mathcal O(n^2m^2)\) 暴力计算,而加上特殊性质,则可以骗到 \(75pts\) 正解: 我们发现,在一维情况下,\(\mod k\) 相同的前缀和相减 ...
- SpringBoot 指定用户退出登录
HttpSessionConfig.java package com.meeno.common.session; import com.meenoframework.common.filter.Ses ...
- Best Cow Line
给定长度为N的字符串s,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下列任意操作. -从S的头部删除一个字符,加到T的尾部 -从S的尾部删除一个宇符,加到T的尾部 目标是要构造字典序 ...