-1

今天,我正在阅读 == 运算符、Equal 函数和 Object.ReferenceEqual 方法。

  • 运算符 == 用于检查相等引用。
  • Equal Method - 它用于检查相等的值。
  • Object.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 作为 == 运算符检查参考。

第 2 行 – 输出为 False。

问题 1. 对象的相等函数校验值。在这里,我们有相同的价值,但我得到了 False。为什么?

第 3 行 – 输出为真。

问题 2. 我在这里进行铸造,所以我得到了 True。为什么?

第 4 行。输出为 False。

据我所知,这两个对象都是不同的类型。所以,我越来越错了。

第 5 行。输出为 False。

问题 3. 我在这里进行铸造,但我仍然得到 False。为什么?

问题 4. == 运算符和 Object.ReferenceEqual 有什么区别?

4

3 回答 3

1

对象的相等函数检查值。在这里,我们有相同的价值,但我得到了 False。为什么?

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

在这里我正在做演员,所以我得到了真实。为什么?

您没有进行强制转换,而是将 5 转换为其十进制字符串表示形式,即"5".

在这里我正在做演员,但我仍然是假的。为什么?

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

==Operator 和 和有什么不一样Object.ReferenceEqual

Object.ReferenceEqual忽略 operator 可能的重载==

于 2016-07-02T12:31:50.160 回答
1

请从这些陈述中清醒过来:

运算符 == 用于检查相等引用。
Equal Method - 它用于检查相等的值。

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

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

第 2 行:错误。因为int.Equals(object)由编译器选择并且object( strValue) 是字符串而不是int. int不等于string所以它是假的。

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

第 4 行:错误。因为object.ReferenceEquals检查引用相等所以答案是显而易见的。

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

于 2016-07-02T12:32:13.327 回答
0

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

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

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

问题4:==和referenceequal一样,除了string。但是 == 运算符可以重载,因此如果要测试身份,请使用 ReferenceEquals https://msdn.microsoft.com/nl-nl/library/6a71f45d.aspx

于 2016-07-02T12:31:42.410 回答