操作符==,方法和对象相等.c#中的ReferenceEqual

本文关键字:ReferenceEqual 中的 对象 方法 操作符 | 更新日期: 2023-09-27 17:53:57

今天,我正在阅读==操作符,相等函数和对象。ReferenceEqual方法。

  • Operator ==用于检查引用是否相等。
  • Equal Method -用于检查相等的值。
  • 对象。ReferencEqual -用于检查引用是否相等。
我已经创建了一个测试控制台应用程序。我有几个问题要问。如果你能把所有的答案都告诉我,那对我就有帮助了。
class Program
{
    static void Main(string[] args)
    {
        int intValue = 5;
        string strValue = "5";
        Console.WriteLine(string.Format("{0}  ", intValue.ToString() == strValue));// Output is TRUE
        Console.WriteLine(string.Format("{0}  ", intValue.Equals(strValue))); // Output is FALSE
        Console.WriteLine(string.Format("{0}  ", intValue.ToString().Equals(strValue))); // Output is TRUE 
        Console.WriteLine(string.Format("{0}  ", object.ReferenceEquals(intValue, strValue)));// Output is FALSE
        Console.WriteLine(string.Format("{0}  ", object.ReferenceEquals(intValue.ToString(), strValue)));// Output is FALSE

        Console.Read(); 
    }

我在输出中有五行。

第1行-输出为True。

据我所知,我在这里做铸造。所以我得到TRUE ==操作符检查引用。

第2行-输出为False。

问题1。对象的函数检查值相等。这里我们有相同的值,但我得到假。为什么?

第3行-输出为True。

问题2。这里我在选角,所以我得到True。为什么?

4号线。输出为False。

据我所知,这两个对象是不同类型的。所以,我得到的是FALSE

第5行。输出为False

问题3。这里我正在做铸造,但我仍然得到假。为什么?

问题4。== Operator和Object.ReferenceEqual的区别是什么?

操作符==,方法和对象相等.c#中的ReferenceEqual

请不要再想这些话了:

Operator ==用于检查引用是否相等。
相等方法-用于检查相等的值。

可以覆盖operator==Equals来修改它们的行为。由于operator==不是虚拟的,所以在编译时就知道选择了哪个方法,而Equals是在运行时根据对象类型选择的。(选择合适方法的整个过程称为方法解析)

第一行:True。因为string.operator==是由编译器选择的,它比较的是字符串而不是它们的引用。

第二行:False。因为int.Equals(object)是由编译器选择的,而object (strValue)是字符串而不是intint不等于string,所以为假。

第三行:True。因为string.Equals(string)是由编译器选择的,它检查值的相等性,而不是引用。

第四行:False。因为object.ReferenceEquals检查引用是否相等,所以答案是显而易见的。

第5行:False同上。intValue.ToString()在内存中创建一个值为"5"的新字符串对象,它与strValue指向的对象不同,因此答案为假。

对象的相等功能检查值。这里我们有相同的值,但我得到假。为什么?

不同类型的对象不可能具有相同的值。第一个对象的整数值为5,而第二个对象的字符串值为"5"。字符串"5"是整数值5的一种可能的表示,即它的十进制表示。然而,它不是相同的值。毕竟,您不会期望"101"等于5,即使101是5的二进制表示。

这里我在做casting,所以我得到True。为什么?

你不是在进行类型转换,你是在将5转换为它的十进制字符串表示形式,即"5"

这里我正在做铸造,但我仍然得到假。为什么?

因为您得到了具有相同内容的不同对象(即单个字符串,其中包含字符"5")。

==Object.ReferenceEqual的区别是什么?

Object.ReferenceEqual忽略操作符==可能的重载。

问题1:它只在类型为Int32时返回true,但它是一个字符串https://msdn.microsoft.com/en-us/library/de3wwa8z (v = vs.110) . aspx

问题2:字符串。如果值相同,Equals返回true,在两种情况下都是:"5"。https://msdn.microsoft.com/en-us/library/system.string.equals (v = vs.110) . aspx

问题3:它们指向不同的对象,因此ReferenceEqual返回falsehttps://msdn.microsoft.com/nl-nl/library/system.object.referenceequals (v = vs.110) . aspx

问题4:==与referenceequal相同,除了string。但是==操作符可以被重载,所以如果您想测试身份,请使用ReferenceEqualshttps://msdn.microsoft.com/nl-nl/library/6a71f45d.aspx