==与Object.Equals(对象)在.NET中该使用哪一个?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

所以,当我还是新手的比较新手时,我现在认为这两种东西是相互之间的语法糖,也就是说相互使用一种语言只是个人偏好。随着时间的推移,即使在默认实现中(见本文本文),我也会发现这两者不是一回事。为了进一步混淆这个问题,可以分别覆盖/重载每一个,从而具有完全不同的含义。

这是一件好事,有什么区别,什么时候/为什么应该使用另一种?

提问于
用户回答回答于

MSDN对这两件事情有清晰而坚实的描述。

object.Equals方法

运算符==

可重载操作符

覆盖等于()和运算符==的指导原则

这是一件好事,有什么区别,什么时候/为什么应该使用另一种?

它怎么可能是“好”或“坏”的东西?一种方法,另一种 - 运营商。如果参考平等不够,超载,否则保持原样。对于原始类型,他们只是在框外工作。

用户回答回答于
string x = "hello";
string y = String.Copy(x);
string z = "hello";

要测试是否x指向与以下对象相同的对象y

(object)x == (object)y  // false
x.ReferenceEquals(y)    // false
x.ReferenceEquals(z)    // true (because x and z are both constants they
                        //       will point to the same location in memory)

要测试是否x具有与以下相同的字符串值y

x == y        // true
x == z        // true
x.Equals(y)   // true
y == "hello"  // true

请注意,这与Java不同。在Java中,==运算符不会被重载,所以Java中常见的错误是:

y == "hello"  // false (y is not the same object as "hello")

对于Java中的字符串比较,需要始终使用 .equals()

y.equals("hello")  // true

扫码关注云+社区