我應該從下面的結果中對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