为什么将相同的两个数字转换为Object使它们不相等?

san*_*ngh 4 c#

我有以下代码片段但输出错误.

class Program
    {
        static void Main(string[] args)
        {
            var i = 10000;
            var j = 10000;
            Console.WriteLine((object) i == (object) j);


        }
    }
Run Code Online (Sandbox Code Playgroud)

我期待的是真的,但我变得虚伪

mar*_*ind 21

您正在装箱数(通过对象强制转换)为每个变量创建一个新实例.==对象的运算符基于对象标识(也称为引用相等),因此您看到false(因为实例不相同)

要正确比较这些对象,您可以使用Object.Equals(i, j)i.Equals(j).这将起作用,因为对象的实际运行时实例将是Int32Equals()方法具有正确的整数相等语义.


HuB*_*eZa 5

您正在使用==默认调用ReferenceEquals.你应该使用:

Console.WriteLine(((object)i).Equals((object)j));
Run Code Online (Sandbox Code Playgroud)