Object t = 4;
Object s = 4;
if (t == s) { // false
}
List<Object> q = new List<object>() { t };
Boolean found = q.Contains(s); // found = true!
在上面的代码中,
t == s
返回 false
并不让我感到惊讶;它比较的是两个对象的引用,而这两个引用并不相同。但我很惊讶的是 Contains 方法返回了 true;显然它不仅仅是比较对象引用..它好像在比较 4 和 4 的未装箱值..但它如何知道要将对象拆箱以进行比较?我试图理解这里发挥作用的更大原则。
==
默认比较的是对象在内存中的引用,由于它们是两个不同的对象,所以它们在内存中有两个不同的位置。因此它们不相等。 - Hunter McMillen