【问题标题】:.NET, Is Equal() just ==? [duplicate].NET,Equal() 是否只是 ==? [复制]
【发布时间】:2011-07-10 23:24:24
【问题描述】:

可能重复:
C# difference between == and .Equals()
== vs Equals in C#

嗨, 就一般用途而言,== 和 Equals() 是一样的吗?我的意思是,如果他的对象相同(参考),两者都只返回 true?

【问题讨论】:

  • 顺便说一句,没有所谓的“一般”用途;计算机是二进制的,这是一种或另一种方式!
  • 我投票支持重新打开,因为作为重复提到的问题没有谈论==Equals 之间的概念差异。相反,它处理的是操作数评估顺序的一种特定情况,这是一个不同的主题。
  • @Heinzi:你是对的。它可能是 this question 的副本。
  • @Cody:好点子。是否有可能收回重新投票?
  • @Heinzi:不,很遗憾不是。我自己也犯过很多这样的错误。但如果没有其他人同意,它们会在几天后消失。 (巧合的是,original 提议的副本最初是我找到的问题的副本。)

标签: c# reference operators equals


【解决方案1】:

不,它们有不同的用途 它们都可以通过继承类来定制,这意味着理论上 A==B 可以返回与 A.Equals(B) 不同的值,但主要区别在于 == 在编译时解析,而 Equals 在运行时解析

【讨论】:

  • 编译时间是什么意思?
【解决方案2】:

Equals== 用于不同的目的:

因为 Equals 是一个虚方法,所以任何类都可以覆盖它的实现。任何表示一个值的类,基本上是任何值类型,或一组值作为一个组,例如复数类,都应该覆盖 Equals。 [...]

当一个类型是不可变的,即包含在实例中的数据不能改变时,重载运算符 == 来比较值相等而不是引用相等可能很有用,因为作为不可变对象,它们可以被认为是只要它们具有相同的值,就相同。在非不可变类型中覆盖 operator == 不是一个好主意。

【讨论】:

    【解决方案3】:

    第一个问题,不,不是。

    第二个问题,是的。如果

    • 比较的是引用类型,它们都属于同一类型
    • 如果它们指向同一个引用
    • == 运算符未重载
    • Equals 方法未被覆盖

    比是,== 可以被视为与 Equals 相同。

    【讨论】:

    • 最后一个项目符号应该被“覆盖”
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多