gpt4 book ai didi

C# 运算符 ==、StringBuilder.Equals、Object.Equals 和 Object.ReferenceEquals 之间的区别

转载 作者:IT王子 更新时间:2023-10-29 04:19:27 25 4
gpt4 key购买 nike

我有一个关于 Object.EqualsEquals(object) 的问题。我的示例代码如下:

class Program
{
static void Main(string[] args)
{
var sb1 = new StringBuilder("Food");
var sb2 = new StringBuilder("Food");
Console.WriteLine(sb1 == sb2);
Console.WriteLine(sb1.Equals(sb2));
Console.WriteLine(Object.Equals(sb1, sb2));
Console.WriteLine(Object.ReferenceEquals(sb1, sb2));
Console.ReadLine();
}
}

输出是:

False
True
False
False

但据我所知,Object.Equals(sb1, sb2) 内部调用了 sb1.Equals(sb2) 那么为什么它会给出两个不同的结果?

最佳答案

你错过了另一个测试:

Console.WriteLine(sb1.Equals((object)sb2)); // False!

StringBuilder 不会覆盖 Equals(object) , 它用另一个 Equals(StringBuilder) 使它重载 .

Object.Equals(object, object)正在调用 Equals(object),因此结果为 false。

关于C# 运算符 ==、StringBuilder.Equals、Object.Equals 和 Object.ReferenceEquals 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com