Compiler overload resolution may account for an apparent difference in the behavior of the two Equals method overloads. If an implicit conversion between the obj argument and an Int64 is defined and the argument is not typed as an Object, compilers perform an implicit conversion and call the Equals(Int64) method. Otherwise, they call the Equals(Object) method, which always returns false if its obj argument is not an Int64 value. The following example illustrates the difference in behavior between the two method overloads. In the case of the Byte, SByte, Int16, UInt16, Int32, and UInt32 values, the first comparison returns true because the compiler automatically performs a widening conversion and calls the Equals(Int64) method, whereas the second comparison returns false because the compiler calls the Equals(Object) method.