【发布时间】:2009-10-19 00:30:12
【问题描述】:
我应该从以下结果中对 Equals()、ReferenceEquals() 和 == 做出什么决定?他们实际生产什么?
#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
见鬼!我什么都不懂。
对我来说,第一个块的 referenceEquals() 应该返回 true。 == 在第二个块中应该返回 false (因为引用不同)。 并且,第 4 块中的两个 Equals() 都应该返回 true(因为它们的值相同)。
【问题讨论】:
-
您能否缩小您的问题范围,具体来说:1) 您对这些结果中的哪些感到惊讶 2) 您在谈论什么决定
-
好评。查看更新。
-
referenceEquals 比较对象实例引用,因为 int 值是两个不同对象的框,它们具有不同的引用。 == 默认情况下比较引用,因此 MyClass 的两个实例,即使具有相同的状态,也有不同的引用,因为它们是两个不同的对象。
-
另外,这个帖子的副本:stackoverflow.com/questions/772953/…