问题标签 [equals-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
244 浏览

c# - 可以为接口引用定义 == 的行为吗?

如果接口继承了 IEquatable,则实现类可以定义 Equals 方法的行为。是否可以定义 == 操作的行为?

通过比较它们的值来检查两个 IFoo 引用是否相等:

是否可以if (X == Y)在 Foo 上使用 Equals 方法?

0 投票
5 回答
873 浏览

c++ - 一个操作符 ==,其参数是非常量引用

这个帖子,我看过这个:


在我们继续之前,这非常重要:

  • 不是在质疑任何人的编码能力。
  • 只是想知道为什么有人在比较中需要非常量引用。
  • 问题的发布 者没有编写该代码。

这是以防万一。这也很重要:

  • 我添加了/*const*/s 并重新格式化了代码。

现在,我们回到主题:

我想不出一个可以让您修改其按引用参数的等式运算符的合理使用。你?

0 投票
13 回答
125652 浏览

c# - 运算符 == 不能应用于 C# 中的泛型类型吗?

根据MSDN==中运营商的文档,

对于预定义的值类型,相等运算符 (==) 如果其操作数的值相等则返回 true,否则返回 false。对于字符串以外的引用类型,== 如果它的两个操作数引用同一个对象,则返回 true。对于字符串类型,== 比较字符串的值。用户定义的值类型可以重载 == 运算符(请参阅运算符)。用户定义的引用类型也可以,尽管 默认情况下 == 对于预定义的和用户定义的引用类型的行为如上所述。

那么为什么这个代码片段无法编译呢?

我收到错误Operator '==' cannot be applied to operands of type 'T' and 'T'。我想知道为什么,因为据我所知,==运算符是为所有类型预定义的?

编辑:谢谢大家。起初我没有注意到该声明仅涉及引用类型。我还认为为所有值类型提供了逐位比较,我现在知道这是正确的。

但是,如果我使用引用类型,==运算符会使用预定义的引用比较,还是如果类型定义了运算符,它会使用运算符的重载版本?

编辑 2:通过反复试验,我们了解到==运算符在使用不受限制的泛型类型时将使用预定义的引用比较。实际上,编译器将使用它可以找到的最佳方法来处理受限类型参数,但不会再看下去了。例如,下面的代码将始终打印true,即使Test.test<B>(new B(), new B())被调用:

0 投票
4 回答
491 浏览

c# - 重载operator==后,如何比较两个变量是否指向同一个对象?

重载比较运算符,如果两个变量指向同一个对象(即不是值)如何比较

0 投票
2 回答
2301 浏览

c# - 有什么方法可以让实现 IEntity 和向下转换的类进行运算符 == 比较?

基本上这就是问题所在。我系统中的所有实体都由它们的类型和它们的id.

很标准的场景。由于所有实体都有一个 Id,我为所有实体定义了一个接口。

为了简化我制作的实体的创建:

客户和产品类似于

我认为这是笨拙的多莉。我认为我所要做的就是在每个实体中覆盖 Equals (如果我非常聪明,我什至可以在 中只覆盖它一次BaseEntity)以及所有工作。

所以现在我正在扩大我的测试范围,发现它并不那么简单!首先,当向下转换IEntity并使用覆盖时==BaseEntity<>不使用。

那么解决方案是什么?还有什么我可以做的吗?如果没有,这很烦人。

更新 1我的测试似乎有问题 - 或者更确切地说是比较泛型。看一下这个:

这里发生了什么?这不是我担心的那么大的问题,但仍然很烦人,并且语言的行为方式完全不直观。

更新 2啊,我明白了,IEntity出于某种原因,泛型隐式向下转换。我认为这对我的域的消费者来说是不直观且可能存在问题的,因为他们需要记住,泛型方法或类中发生的任何事情都需要与Equals()

0 投票
6 回答
5720 浏览

c++ - 运算符 == 的 C++ 模板类错误

错误:
错误 C2678:二进制“==”:未找到采用“const entry”类型的左侧操作数的运算符(或没有可接受的转换)

功能:

indexList.h
indexList.cpp

这假设是一个重载的运算符吗?作为一个模板类,我不确定我是否理解错误?

解决方案- 类中的重载函数现在声明为 const:

0 投票
6 回答
1432 浏览

c# - C# == 操作符具体做了什么?

在 c# 中,当您在两个对象上与“==”运算符进行比较时,在后台究竟会发生什么?它只是比较地址吗?还是类似于 Equals() 或 CompareTo() ?

PS:java中的“==”操作符呢?它的行为是否相同?

0 投票
5 回答
10543 浏览

c# - C# 隐式转换和 == 运算符

一些上下文代码:

是否可以在不同类型的实例上使用 == 运算符,其中一个可以隐式转换为另一个?我错过了什么?

编辑:
如果类型必须是相同的调用 ==,那么为什么

作品?

0 投票
9 回答
781 浏览

.net - 重写 Equals 方法时是否需要重写 == 和 != 运算符?(。网)

还是建议这样做?为什么?

0 投票
8 回答
336 浏览

c# - 如何处理相等比较中的空值?

当我必须为

我应该做

错误的?

还有呢

它也应该是假的吗?

更新人们质疑这个问题背后的原因。假设 != 和 == 总是相反的。但是,如果我实现这些方法以使上述所有比较结果为假,那么在某些情况下 == 和 != 运算符将产生相同的结果。所以 != 应该返回 true 还是 false 是一个两难的问题。