【问题标题】:What is reference identity in c#? [duplicate]c# 中的引用标识是什么? [复制]
【发布时间】:2020-12-08 14:38:22
【问题描述】:

我正在寻找运算符 (==) 和 Equals() 方法之间的区别。许多资源说运算符(==)比较参考身份。什么是真正的参考身份?

【问题讨论】:

标签: c# .net operator-keyword


【解决方案1】:

除了重复之外,我发布此答案是因为该问题更专业于我发现的内容。

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

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

运算符== 可以重载以比较值而不是引用,因此object Equals()ReferenceEquals() 方法有。

这里有一些教程:

C# - Data Types

C# - Variables

Value Type and Reference Type

How do I get the reference count of a CLR object?

【讨论】:

  • Equals() 也可以被覆盖(如果== 是,则可能应该被覆盖)。 ReferenceEquals()不能。
  • 请注意,== 不能覆盖(没有运算符可以) - 但可以重载
  • 另请注意,.NET 不使用引用计数,因此您的答案的后半部分具有误导性。
  • @JonSkeet 今天了解一些有关 ref 计数的信息,谢谢。答案已更正并更新。
  • @OlivierRogier:Java 也不使用引用计数(据我所知,至少在常见的实现中不使用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2013-06-24
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多