c#中的引用标识是什么?

c#中的引用标识是什么?,c#,.net,operator-keyword,C#,.net,Operator Keyword,我正在搜索运算符(=)和Equals()方法之间的差异。许多参考资料都说运算符(=)比较引用标识。什么是真正的参考身份?除了重复的答案,我发布这个答案,因为这个问题比我发现的更专业 简单地说:引用标识就是内存地址相等,因为两个变量是否指向相同的内容,就像一个邮政地址或一杯水。因为引用是隐藏的指针,所以会忘记管理它们 GC也是上面的一层,用于方便管理内存中对象的实例,并忘记销毁/释放我们不再使用的对象 运算符可以重载以比较值而不是引用,因此有onobject和方法 以下是一些教程: Equa

我正在搜索运算符(=)和Equals()方法之间的差异。许多参考资料都说运算符(=)比较引用标识。什么是真正的参考身份?

除了重复的答案,我发布这个答案,因为这个问题比我发现的更专业

简单地说:引用标识就是内存地址相等,因为两个变量是否指向相同的内容,就像一个邮政地址或一杯水。因为引用是隐藏的指针,所以会忘记管理它们

GC也是上面的一层,用于方便管理内存中对象的实例,并忘记销毁/释放我们不再使用的对象

运算符可以重载以比较值而不是引用,因此有on
object
和方法

以下是一些教程:


Equals()
也可以重写(如果
=
为,则可能应该重写)
ReferenceEquals()
不能。请注意,
==
不能被重写(没有运算符可以),但它可以被重载。还要注意的是.NET不使用引用计数,所以你的答案的后半部分是误导性的。@JonSkeet今天学习一些关于引用计数的知识,谢谢。答案已更正并更新。@OlivierRogier:Java也不使用引用计数(据我所知,至少在普通实现中不使用)。@Soleil MathieuPrévot:string不是值类型,它是引用类型。==不是值类型(double、int、struct等)的引用(指针)相等,仅用于引用类型,当不超载时。