我应该从下面的结果中对Equals(),ReferenceEquals()和==做出什么决定?他们生产什么?Value vs Reference
#region
int integer = 1;
int integer2 = integer;
bool referenceEquality = (integer == integer2);//true
bool valueEquality = integer.Equals(integer2);//true
bool valueEqualityMore = object.Equals(integer, integer2);//true
bool valueEqualityMoreMore = object.ReferenceEquals(integer, integer2);//false
#endregion
#region
int integer = 1;
int integer2 = 1;
bool referenceEquality = (integer == integer2);//true
bool valueEquality = integer.Equals(integer2);//true
bool valueEqualityMore = object.Equals(integer, integer2);//true
bool valueEqualityMoreMore = object.ReferenceEquals(integer, integer2);//false
#endregion
#region
MyClass obj = new MyClass(1, "Hello");
MyClass obj2 = obj;
bool referenceEquality = (obj == obj2);//true
bool valueEquality = obj.Equals(obj2);//true
bool valueEqualityMore = object.Equals(obj, obj2);//true
bool valueEqualityMoreMore = object.ReferenceEquals(obj, obj2);//true
#endregion
#region
MyClass obj = new MyClass(1, "Hello");
MyClass obj2 = new MyClass(1, "Hello");
bool referenceEquality = (obj == obj2);//false
bool valueEquality = obj.Equals(obj2);//false
bool valueEqualityMore = object.Equals(obj, obj2);//false
bool valueEqualityMoreMore = object.ReferenceEquals(obj, obj2);//false
#endregion
地狱!我一点都没懂。
对我来说,第一个block的referenceEquals()应该返回true。 ==在第二个块中应该返回false(因为引用是不同的)。 而且,第四块中的两个Equals()应该返回true(因为它们的值相同)。
您可以缩小你的问题,具体如下: 1)这些结果你发现令人惊讶的 2)你在说什么决定 – Mathias 2009-10-18 16:09:58
好评。查看更新。 – anonymous 2009-10-18 16:13:37
referenceEquals比较对象实例引用,因为int值是对两个不同对象的框,它们具有不同的引用。 ==默认情况下比较引用,所以即使具有相同状态的MyClass的两个实例也具有不同的引用,因为它们是两个不同的对象。 – Elisha 2009-10-18 16:19:31