考虑以下代码:
object str1 = "shahrooz"; object str2 = "shahrooz"; object int1 = 1; object int2 = 1; Console.WriteLine("str1 == str2 : " + (str1 == str2)); Console.WriteLine("int1 == int2 : " + (int1 == int2)); Console.ReadLine();
运行此代码时,您将获得以下结果:
str1 == str2 : True int1 == int2 : False
两个比较都是对象,但为什么第一个比较返回true但第二个比较返回false?
的==
运算符执行参考相等性检查,如果这两个操作数的类型的object
或没有更具体相等运算可以基于被确定编译时类型的操作数.
在您的情况下,编译时操作数类型是object
,因此检查引用相等性.在您分配1
给任一变量时,运行时将值"装箱"到对象中.因此,您将获得包含整数值1的两个对象,但它们是两个单独的对象,因此返回引用相等性false
.
要执行值相等性比较,请使用该Equals()
方法.它可以在子类中重写以执行特定于类型的值比较,我相信这是您想要做的.表达式int1.Equals(int2)
应该返回你想要的.由于这两个变量是空的,你可能需要将其写为int1 != null ? int1.Equals(int2) : int2 == null
防止在投掷的NullReferenceException int1
是null
.