问题标签 [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.
c# - IEqualityComparer使用 ReferenceEquals
是否有使用的默认IEqualityComparer<T>
实现ReferenceEquals
?
EqualityComparer<T>.Default
使用 ObjectComparer,它使用object.Equals()
. 在我的情况下,对象已经实现IEquatable<T>
,我需要忽略它并仅通过对象的引用进行比较。
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<> ,但我希望得到不同的答案。
谢谢
vb.net - 'Is' VB.NET 关键字是否与 Object.ReferenceEquals 相同?
VB.NET 关键字是否Is
与 Object.ReferenceEquals 相同?
java - 当我们有 == 运算符时,为什么要使用 equals() 方法?
当我看到equals()
方法的实现时,它什么都不做,但与所做的相同==
。所以我的问题是,当我们拥有==
执行相同工作的操作员时,需要将其作为单独的方法吗?
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?
c# - Object.Equals 是虚拟的,但是 Object.operator== 在 C# 中不使用它?
我在 C# 中遇到了一个我不太了解的奇怪“不对称”。请参阅以下代码:
对于所有 .NET 专家来说,这可能是显而易见的,但第二个断言失败了。
在 Java 中,我了解到 == 是这里称为 Object.ReferenceEquals 的同义词。在 C# 中,我认为 Object.operator== 使用 Object.Equals,它是虚拟的,因此在 System.String 类中被覆盖。
有人可以解释一下,为什么第二个断言在 C# 中失败?我的哪些假设是错误的?
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。为什么在这种情况下对象具有相同的哈希码?抱歉,代码冗长,提前致谢!
java - null 和空 ("") Java 字符串之间的区别
null
和""
(空字符串)有什么区别?
我写了一些简单的代码:
两个语句都返回false
。看来,我无法找到它们之间的实际区别。
c# - ReferenceEquals 对字符串工作错误
为什么在这种情况ReferenceEquals
下对象的方法表现不同?
所以在这种情况下,它会得到一个结果true
。以防万一,它比较我的字符串的值而不是引用。但是当我写这样的东西时:
在这种情况下,它工作正常,结果是false
,因为它比较了我的对象的引用。
string - Scala 中 java.lang.String 的引用相等
人们会期望,即使字符串是不可变的,对于 Scala 中的 java.lang.String 对象,值相等和引用相等也不相同。这意味着两个 string-holding val
s 不应该是引用相等的,即使它们的字符串相同。但这是我在 2.9.1.final REPL 中得到的:
知道为什么结果不是false
吗?List("a")
与而不是"a"
按预期进行的相同实验。该eq
方法在AnyRef中被标记为 final 。有没有专门为String
or完成的编译器魔法java.lang.String
?