首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET中的==与Object.Equals(object)

.NET中的==与Object.Equals(object)
EN

Stack Overflow用户
提问于 2008-09-22 00:15:11
回答 4查看 50.6K关注 0票数 51

因此,当我还是一个相对新手的时候,我曾经认为这两个东西是语法上的糖,也就是说,使用一个而不是另一个仅仅是个人偏好。随着时间的推移,我发现这两者并不是一回事,甚至在缺省实现中也是如此(请参阅thisthis)。更令人困惑的是,每一个都可以被分别覆盖/重载,以具有完全不同的含义。

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

EN

回答 4

Stack Overflow用户

发布于 2008-09-22 01:31:12

代码语言:javascript
复制
string x = "hello";
string y = String.Copy(x);
string z = "hello";

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

代码语言:javascript
复制
(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相同的字符串值

代码语言:javascript
复制
x == y        // true
x == z        // true
x.Equals(y)   // true
y == "hello"  // true

请注意,这与Java不同。在Java语言中,==操作符不是重载的,所以在Java语言中一个常见的错误是:

代码语言:javascript
复制
y == "hello"  // false (y is not the same object as "hello")

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

代码语言:javascript
复制
y.equals("hello")  // true
票数 34
EN

Stack Overflow用户

发布于 2015-08-20 06:23:30

我打算把这篇文章作为对公认答案的评论,但我认为在决定采取哪条路线时,这一点值得考虑。

dotnetfiddle:https://dotnetfiddle.net/gESLzO

小提琴代码:

代码语言:javascript
复制
    Object a = null;
    Object b = new Object();

    // Ex 1
    Console.WriteLine(a == b);
    // Ex 2
    Console.WriteLine(b == a);

    // Ex 3     
    Console.WriteLine(b.Equals(a));
    // Ex 4
    Console.WriteLine(a.Equals(b));

前3个WriteLine示例可以工作,但第四个会抛出一个异常。1和2使用==,这是一个静态方法,不需要实例化任何一个对象。

示例3之所以有效,是因为b是实例化的。

示例4失败,因为anull,因此不能在空对象上调用方法。

因为我尽可能懒惰地编写代码,所以我使用==,特别是在处理其中一个对象(或两个)都可以为空的情况下。如果我没有这样做,那么在调用.Equals()之前,我必须首先做一个空检查。

票数 6
EN

Stack Overflow用户

发布于 2008-09-22 00:18:29

我对两者的用法的理解是这样的:使用==表示概念上的相等(在上下文中,这两个参数的含义是否相同?),使用.Equals表示具体的相等(这两个参数实际上是完全相同的对象吗?)。

编辑: Kevin Sheffield的链接文章更好地解释了价值与引用相等…

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/112625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档