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));
对于以上语句的输出搞不懂,请专家解释。
展开
 我来答
网上冲浪玩家
2011-01-23 · TA获得超过574个赞
知道小有建树答主
回答量:535
采纳率:100%
帮助的人:344万
展开全部
一般判断是否相等有两种意思:
一是值上的相等(只适合string),这种判断用string.equals(string),
另一种是==判断方式,这种是地址上的判断,判断俩个对象是否来自同一个地址,即:真正意义上的相等.
比如:string str="123"; string str2="123";
str.equals(str1)等于true;
str==str1就等于false;
你题上的s==t属于地址上的判断,应该是false.
贼寇在何方
推荐于2016-08-17 · TA获得超过770个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:714万
展开全部
这里有两个关键的式子,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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仍灵松6g
2011-01-23 · TA获得超过142个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:141万
展开全部
object对象的equals方法是虚方法,意味着可以被子类覆盖。对于你提到的方法来说是因为在运行的时候CLR得知这是个int类型的比较,而且由于int类型内部覆盖了equals方法,但是equals方法内部调用的是int类型的重载的操作符“==”,所以上面的两个结果是相同的,因为其内部的实现是同样的。类似的还有string等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lofe8888
2011-01-31
知道答主
回答量:35
采纳率:0%
帮助的人:0
展开全部
s == t对比的是对象object,
而Equals对比的是值,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式