问题标签 [referenceequals]

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 投票
5 回答
9287 浏览

c# - IEqualityComparer使用 ReferenceEquals

是否有使用的默认IEqualityComparer<T>实现ReferenceEquals

EqualityComparer<T>.Default使用 ObjectComparer,它使用object.Equals(). 在我的情况下,对象已经实现IEquatable<T>,我需要忽略它并仅通过对象的引用进行比较。

0 投票
2 回答
1673 浏览

c# - 如何在覆盖 GetHashCode() 的类型上使用 Object.GetHashCode()

我有一个实现 IEquatable<> 的 A 类,使用它的字段(比如 Ab 和 Ac)来实现/覆盖 Equals() 和覆盖 GetHashCode(),99% 的时间一切正常。类 A 是继承自接口 D 的层次结构(类 B、C)的一部分;它们都可以一起存储在字典 Dictionary 中,因此当它们都带有自己的默认 Equals()/GetHashCode() 时会很方便。

但是,在构建 AI 时,有时需要做一些工作来获取 Ab 和 Ac 的值;在发生这种情况时,我想存储对正在构建的实例的引用。在这种情况下,我不想使用 A 提供的默认 Equals()/GetHashCode() 覆盖。因此,我正在考虑实现一个 ReferenceEqualityComparer,这意味着强制使用 Object 的 Equals()/GetHashCode() :

问题是,由于 A 覆盖了 Object.GetHashCode(),我如何(在 A 之外)为 A 的实例调用 Object.GetHashCode()?

一种方法当然是 A 不实现 IEquatable<> 并始终向我创建的任何字典提供 IEqualityComparer<> ,但我希望得到不同的答案。

谢谢

0 投票
1 回答
1765 浏览

vb.net - 'Is' VB.NET 关键字是否与 Object.ReferenceEquals 相同?

VB.NET 关键字是否Is与 Object.ReferenceEquals 相同?

0 投票
8 回答
11170 浏览

java - 当我们有 == 运算符时,为什么要使用 equals() 方法?

当我看到equals()方法的实现时,它什么都不做,但与所做的相同==。所以我的问题是,当我们拥有==执行相同工作的操作员时,需要将其作为单独的方法吗?

0 投票
3 回答
117 浏览

java - In `equals(T value)`, must T be Object, or can it be like City, etc?

I'm trying to understand the equals() method better. All examples I've seen do something like:

Must the method take on Object and not a City?

E.g. is this below not allowed?

0 投票
2 回答
608 浏览

c# - Object.Equals 是虚拟的,但是 Object.operator== 在 C# 中不使用它?

我在 C# 中遇到了一个我不太了解的奇怪“不对称”。请参阅以下代码:

对于所有 .NET 专家来说,这可能是显而易见的,但第二个断言失败了。

在 Java 中,我了解到 == 是这里称为 Object.ReferenceEquals 的同义词。在 C# 中,我认为 Object.operator== 使用 Object.Equals,它是虚拟的,因此在 System.String 类中被覆盖。

有人可以解释一下,为什么第二个断言在 C# 中失败?我的哪些假设是错误的?

0 投票
4 回答
4274 浏览

reference - 在值和引用类型的上下文中, a==b 和 a.Equals(b) 有什么区别?

我已经多次遇到这个问题,虽然答案很有意义,但我想自己用一个简单的控制台应用程序来检查一下。

}

假设 1:我从通常发布的回复中了解到,对于引用类型, a==b 比较引用,而 a.Equals(b) 比较引用的实际值。这就是在查看我的程序结果时让我感到震惊的原因。

参考我的程序,在案例 2 中 - 虽然 a 和 c 的引用内存地址不同,但它们的字段被分配了相同的值。仍然 a.Equals(c) 返回 false 因为它们仍然不相等,因为它们具有不同的哈希码。我曾假设它们最初会根据假设 1 返回 true,但它们并不相等是有道理的。但是,== 和 .Equals 之间的确切区别究竟是什么?

在情况 3 中,使用带有字符串的 '==' 运算符比较它们的值而不是内存地址。

在案例 6 中,由 .Equals 方法比较的值类型是不同的,而该方法期望它们是相同的类型。因此它返回false。

我仍然不明白的是案例 7。为什么在这种情况下对象具有相同的哈希码?抱歉,代码冗长,提前致谢!

0 投票
22 回答
476395 浏览

java - null 和空 ("") Java 字符串之间的区别

null""(空字符串)有什么区别?

我写了一些简单的代码:

两个语句都返回false。看来,我无法找到它们之间的实际区别。

0 投票
5 回答
2991 浏览

c# - ReferenceEquals 对字符串工作错误

为什么在这种情况ReferenceEquals下对象的方法表现不同?

所以在这种情况下,它会得到一个结果true。以防万一,它比较我的字符串的值而不是引用。但是当我写这样的东西时:

在这种情况下,它工作正常,结果是false,因为它比较了我的对象的引用。

0 投票
2 回答
2736 浏览

string - Scala 中 java.lang.String 的引用相等

人们会期望,即使字符串是不可变的,对于 Scala 中的 java.lang.String 对象,值相等和引用相等也不相同。这意味着两个 string-holding vals 不应该是引用相等的,即使它们的字符串相同。但这是我在 2.9.1.final REPL 中得到的:

知道为什么结果不是false吗?List("a")与而不是"a"按预期进行的相同实验。该eq方法在AnyRef中被标记为 final 。有没有专门为Stringor完成的编译器魔法java.lang.String