为什么以下表达式不同?
[1] (object)0 == (object)0 //false
[2] ((object)0).Equals((object)0) // true
实际上,我可以完全理解[1],因为.NET运行时可能会box整数并开始比较引用。但是为什么[2]不同?
int16aka shortEquals方法的可用重载,然后查看msdn.microsoft.com/en-us/library/ms173105.aspx。我不想破坏埃里克·利珀特(Eric Lippert)的困惑,但是一旦阅读这些页面,就应该很容易弄清楚。
((Integer)0)==((Integer)0)评估为true。
IFormattable x = 0; bool test = (object)x == (object)x;。当结构已经在盒子中时,不执行新的装箱。
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);现在对照实际情况进行检查。您的预测正确吗?如果没有,您能解释这个差异吗?