C#如何判断object类型是相等的
objects=1;objectt=1;Console.WriteLine("objects={0},objectt={1},s==t的值:{2}",s,t,s==t);...
object s = 1;
object t = 1;
Console.WriteLine("object s={0},object t={1},s == t的值:{2}",s,t,s == t);
Console.WriteLine("s.Equals(t)的值:{0}",s.Equals(t));
对于以上语句的输出搞不懂,请专家解释。 展开
object t = 1;
Console.WriteLine("object s={0},object t={1},s == t的值:{2}",s,t,s == t);
Console.WriteLine("s.Equals(t)的值:{0}",s.Equals(t));
对于以上语句的输出搞不懂,请专家解释。 展开
4个回答
展开全部
这里有两个关键的式子,s==t和s.Equals(t),下面我们来逐一分析
对于s==t,系统会调用object.Equals( object, object )这个静态方法:
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
而object是引用类型,引用类型的变量,遇到等号运算符(==)时,依据内存地址判等
s和t两个值是在不同时刻由1装箱而来,所以地址不一样,所以objA == objB得到结果false,返回False
而对于s.Equals( t ),由于bool.Equals (object obj)实例方法是一个virtual(虚方法),所以在运行时会调用Int32.Equals(object obj):
public override bool Equals(object obj)
{
return ((obj is int) && (this == ((int) obj)));
}
s和t经过转换,得到了数字1,接着进行数字之间的等号运算,得到True
对于s==t,系统会调用object.Equals( object, object )这个静态方法:
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
而object是引用类型,引用类型的变量,遇到等号运算符(==)时,依据内存地址判等
s和t两个值是在不同时刻由1装箱而来,所以地址不一样,所以objA == objB得到结果false,返回False
而对于s.Equals( t ),由于bool.Equals (object obj)实例方法是一个virtual(虚方法),所以在运行时会调用Int32.Equals(object obj):
public override bool Equals(object obj)
{
return ((obj is int) && (this == ((int) obj)));
}
s和t经过转换,得到了数字1,接着进行数字之间的等号运算,得到True
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
object对象的equals方法是虚方法,意味着可以被子类覆盖。对于你提到的方法来说是因为在运行的时候CLR得知这是个int类型的比较,而且由于int类型内部覆盖了equals方法,但是equals方法内部调用的是int类型的重载的操作符“==”,所以上面的两个结果是相同的,因为其内部的实现是同样的。类似的还有string等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
s == t对比的是对象object,
而Equals对比的是值,
而Equals对比的是值,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询